博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类型转换及返回json对象的问题
阅读量:4921 次
发布时间:2019-06-11

本文共 6044 字,大约阅读时间需要 20 分钟。

@ResponseBody	@RequestMapping(value="/user/getUserId.do")//method=RequestMethod.POST	public JSONObject getUserId(HttpServletRequest request, HttpServletResponse response)throws Exception {	    response.setContentType("text/html");	    request.setCharacterEncoding("utf-8");	    response.setCharacterEncoding("utf-8");	    String phoneNum = request.getParameter("phoneNum");	    JSONObject jsonObject = new JSONObject();	    	    Integer userId = 0;	        try	        {	          	            userId = userSlaveService.getUserId(phoneNum);	     	            if(StringUtils.isNotEmpty(Integer.toString(userId))){		        	jsonObject.accumulate("userId", userId);		        }//		        else{//		        	return null;//		        }	        }	        catch (Exception e)	        {	            Loger.logtxt("user", "获取Userid异常:" + e.toString());	        }	        	        return jsonObject;	}

  

 

1.  Integer 型变量 a  转换成 String 时, 如果 a 是 null ,用 Integer.toString(a)  或者 a.toString() 都会报空指针异常,需要 放到 try catch 中捕获异常。

    如上代码,如果 根据手机号 没有查到 Userid ,则 Userid 是 null 。 Integer.toString(userId) 会抛出 NullPointer 空指针异常,if 中的语句不会执行,跳到 catch , 执行catch 中的代码。 返回的 

jsonObject 是 {}
//获取注册用户userid        function  getUserId(){                     var  phoneNum=$("#phoneNum").val()                                     $.getJSON(                             '<%=basePath %>user/getUserId.do',                             {phoneNum:phoneNum},                             function(data){                                alert("data:" + data)                            alert("data.userid:" + eval(data).userId)                            if(!(eval(data).userId)){                                alert('该手机号未注册,请先注册');                                }                            else{                                             document.getElementById("marcherId").value=data.userId;                            }                         }                   );                         }

前台 js  打印: data:[Object Object]  和 data.userid: undefined . 以及 提示手机号未注册 。 

如果 类型转换 不放到 try catch 中 ,比如写成如下:

@ResponseBody    @RequestMapping(value="/user/getUserId.do")//method=RequestMethod.POST    public JSONObject getUserId(HttpServletRequest request, HttpServletResponse response)throws Exception {        response.setContentType("text/html");        request.setCharacterEncoding("utf-8");        response.setCharacterEncoding("utf-8");        String phoneNum = request.getParameter("phoneNum");        JSONObject jsonObject = new JSONObject();                Integer userId = 0;            try            {                              userId = userSlaveService.getUserId(phoneNum);         //                if(StringUtils.isNotEmpty(Integer.toString(userId))){//                    jsonObject.accumulate("userId", userId);//                }            }            catch (Exception e)            {                Loger.logtxt("user", "获取Userid异常:" + e.toString());            }            if(StringUtils.isNotEmpty(Integer.toString(userId))){                jsonObject.accumulate("userId", userId);            }            else{                return null;            }            return jsonObject;    }

在执行到 if 中的 Integer.toString(userId) 时,程序抛出异常。

后台报错: java.lang.NullPointerException ,程序异常终止,并不会执行 return 和 else 语句。前台页面没有任何反应。

 

如果写成这样:

@ResponseBody    @RequestMapping(value="/user/getUserId.do")//method=RequestMethod.POST    public JSONObject getUserId(HttpServletRequest request, HttpServletResponse response)throws Exception {        response.setContentType("text/html");        request.setCharacterEncoding("utf-8");        response.setCharacterEncoding("utf-8");        String phoneNum = request.getParameter("phoneNum");        JSONObject jsonObject = new JSONObject();                Integer userId = 0;            try            {                              userId = userSlaveService.getUserId(phoneNum);         //                if(StringUtils.isNotEmpty(Integer.toString(userId))){//                    jsonObject.accumulate("userId", userId);//                }            }            catch (Exception e)            {                Loger.logtxt("user", "获取Userid异常:" + e.toString());            }                      jsonObject.accumulate("userId", userId);            return jsonObject;    }
没有查到数据,userId 是 null ,返回的 jsonObject  是 {"userId":null} 。 后台正常返回,没有异常抛出。 在 Chrome 中看到的是 500 Internal Server Error ,jquery1.6.1.js  的  xhr.send( ( s.hasContent && s.data ) || null ); 出错。  前台没有任何反应,没有执行 前台 的
function(data) 函数 。(why?) 对于前台的   /eduappweb/user/getUserId.do?phoneNum=56354635635 HTTP/1.1 消息, 后台返回 HTTP/1.1 500 Internal Server Error The server encountered an internal error that prevented it from fulfilling this request. 所以如果要给前台返回json对象,需要判断json对象中key 的value 是不是 null 。如果json 中 value 的值是 null ,则返回 {} 给前台,不要把 {“key”:null} 这样的形式返回给前台。
$.getJSON(                             '<%=basePath %>user/getUserId.do',                             {phoneNum:phoneNum},                             function(data){                                alert("data:" + data)                            alert("data.userid:" + eval(data).userId)                            if(!(eval(data).userId)){                                alert('该手机号未注册,请先注册');                                }                            else{                                             document.getElementById("marcherId").value=data.userId;                            }                         }                   );

 如果后台返回  null ,会执行 fanction 函数, 打印 data:null 。但是  eval(data).userId 会报错 Uncaught TypeError: Cannot read property 'userId' of null

 如果后台写成这样:

JSONObject jsonObject = new JSONObject();      System.out.println("jsonObject: " + jsonObject);            if(userId==null){                return jsonObject;            }else{                jsonObject.accumulate("userId", userId);            }                    return jsonObject;

返回的是  jsonObject 值是 {}  ,  function函数正常执行。前台 js  打印: data:[Object Object]  和 data.userid: undefined . 以及 提示手机号未注册 。 

 

转载于:https://www.cnblogs.com/z360519549/p/5758379.html

你可能感兴趣的文章
css,js文件后面加一个版本号
查看>>
webpack第一节(2)
查看>>
python之asyncio三种应用方法
查看>>
转:[Server] 在 Windows 上安裝 PHP 5.3 開發環境
查看>>
【IE6的疯狂之二】IE6中PNG Alpha透明(全集)
查看>>
第一个Shell脚本
查看>>
C++ 小笔记
查看>>
Mysql 语句优化
查看>>
例子:进度条
查看>>
包含单引号的sql
查看>>
HTML 基础 2
查看>>
Java 最常见 200+ 面试题全解析:面试必备(转载)
查看>>
LinkedList
查看>>
Spring框架下PropertyPlaceholderConfigurer类配置roperties文件
查看>>
[原创]独立模式安装Hive
查看>>
链表实现单链表创建、排序(升序)
查看>>
Spring旅程(一)为什么使用Spring
查看>>
centos安装桌面和远程连接
查看>>
侠探锦毛鼠之真假白玉堂
查看>>
[mark]如何删除地址栏的记录?
查看>>