程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 類型轉換及返回json對象的問題,轉換返回json對象

類型轉換及返回json對象的問題,轉換返回json對象

編輯:JAVA綜合教程

類型轉換及返回json對象的問題,轉換返回json對象


	@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 . 以及 提示手機號未注冊 。 




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved