2015-05-11 139 views
0

我需要通過ajax(使用Jquery)發送JSON對象,並通過JSP(服務器端)中的請求對象獲取所有參數。通過ajax發送JSON並通過JSP中的請求獲取參數

我的JS代碼:

 var request = new Object(); 
     request.param1= "value1"; 
     request.param2 = "value2"; 
     $.ajax({ 
     type:'GET', 
     url: 'test.jsp', 
     //data: {request:JSON.stringify(dataSend)}, 
     //data: {request:dataSend}, 
     //data: JSON.stringify(request), 
     data:request, 
     async:true, 
     success:function(r){ 
      console.log(r); 
     }, 
     error:function(error){ 
      console.log(error); 
     } 
    }); 

我的JSP代碼:

<%@page import="cl.test.pos.web.delegate.POSXXXXXXXX"%> 
<%@page import="org.json.simple.JSONObject"%> 
<% 
JSONObject j = new JSONObject(); 
if(session.getAttribute("role") != null){ 
    POSXXXXXXXX bx = new POSXXXXXXXX(); 
    String je; 
    je = bx.setTest(request); 
    out.print(je); 
    out.close(); 
}else{ 
    j.put("responseStatus","EXCEPTION"); 
    request.getSession().invalidate(); 
    out.print(j); 
    out.close(); 
} 
%> 

而且方法類是

public String setTest(HttpServletRequest request) throws IOException{ 
    JSONObject j = new JSONObject(); 
    try{ 
     j.putAll(request.getParameterMap()); 
     j.put("responseStatus", "OK"); 
    }catch(FrameworkException e){ 
     /*Any code*/ 
    }catch(Throwable t){ 
     /*Any code*/ 
    } 
    return j.toJSONString(); 
    } 

我希望在客戶端返回一個JSON對象和這是如此,但是,響應是這樣的:

{ 「參數1」:[Ljava.lang.String; @ 182f12f, 「參數2」:Ljava.lang.String; @ 1a881f5}

值是不可理解的,如果我發送對象和數組,它是如此錯誤也是如此,例如:

{ 「parametro4 [1] [P3]」:[Ljava.lang.String; @ c5954b, 「parametro4 [1] [P4]」:[Ljava。 lang.String; @ 1cc9339,「parametro5 [arr1] []」:[Ljava.lang.String; @ 1d5af30}

請幫助我獲取所有參數來自HttpServletRequest的JSONObject。我真的需要知道做到這一點的最佳方式。

(我已經在StackOverFlow中搜索並在網上衝浪,我找不到最好的方法來做到這一點)。

回答

0

我已經解決了這個問題(幾乎所有),從這樣:

public String setTest(HttpServletRequest request) throws IOException{ 
JSONObject j = new JSONObject(); 
try{ 
    JsonParser jp = new JsonParser(); 
    Map m = request.getParameterMap(); 
    Gson gi = new Gson(); 
    String stringJson = gi.toJson(m); 
    j.put("jsonParse",jp.parse(stringJson)); 
    j.put("responseStatus", "OK"); 
}catch(FrameworkException e){ 
    /*Any code*/ 
}catch(Throwable t){ 
    /*Any code*/ 
} 
return j.toJSONString(); 
} 

和服務器響應正確(幾乎):

{ 「jsonParse」:{「parametro5 [ARR1 ] [] 「:[」 1" , 「2」, 「3」], 「pagoAbono」:[ 「假」],​​ 「parametro4 [1] [P4]」:[ 「3」],「parametro4 [1] [P3] 「:[」 2 「],」 parametro1 「:[」 parametro1 「],」 parametro4 [0] [P2] 「:[」 1 「],」 codigoCaja 「:[」 「],」 parametro5 [ARR2 ] [1] [0] [letraX] 「:[」 × 「],」 numeroCheque 「:[」 「],」 facturasPagos 「:[」 195310 | 234509 「],」 rutCliente 「:[」 154809597 「],」銀行 「:[」 「],」 caducidadMes 「:[」 「],」 parametro4 [0] [P1] 「:[」 0 「],」 參數etro5 [ARR2] [1] [] 「:[」 × 「 」X「], 」numeroTarjeta「:[ 」「], 」caducidadYear「:[ 」「], 」montoTotalPago「:[ 」334772「],」 nombreTitular 「:[」 「],」 parametro5 [ARR2] [0] [] 「:[」 一 「 」b「, 」C「], 」parametro3 []「:[ 」一「, 」b「,」 C 「],」 parametro2 [atributo1] 「:[」 atributo1 「]}」,responseStatus 「:」 OK「}

唯一的細節是,數組和對象被解釋像請求參數,而不是真正的Javascript的JSONObject。

例如:

如果客戶端發送此:

var obj = new Object(); 
obj.param1 = [1,2,3]; 

服務器響應此:

obj[param1][0]=1; 
obj[param1][1]=2; 
obj[param1][2]=3; 

而不是響應:

obj.param1[0]=1; 
obj.param1[1]=2; 
obj.param1[2]=3; 

我希望你能理解問題,並給我一個線索或解決方案。

1

parameterMap的值是一個數組對象,而不是字符串:

返回:包含參數名稱作爲關鍵字 和參數值作爲映射值的不可變java.util.Map。參數圖中的鍵是字符串類型的 。 參數圖中的值是字符串類型 array

javadoc for getParameterMao

所以,你需要編寫它,只是重複throught地圖,並把參數名稱/值的對象。