通过ajax发送JSON并在JSP中按请求获取参数

时间:2015-05-11 14:26:19

标签: java jquery ajax json jsp

我需要通过ajax(使用Jquery)发送JSON对象,并通过JSP(服务器端)中的请求Object获取所有参数。

我的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和网上冲浪中搜索过,我找不到最好的方法)。

2 个答案:

答案 0 :(得分:1)

parameterMap 值是一个数组对象,而不是字符串:

  

返回:包含参数名称作为键的不可变java.util.Map   和参数值作为地图值。参数图中的键是   类型为String。 参数映射中的值的类型为String   阵列

javadoc for getParameterMao

所以你需要对它进行编码,只需遍历地图并将参数名称/值放在对象中。

答案 1 :(得分: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();
}

和服务器响应正确(几乎):

  

{&#34; jsonParse&#34; {&#34; parametro5 [ARR1] []&#34;:[&#34; 1&#34;&#34; 2&#34;&# 34; 3&#34],&#34; pagoAbono&#34;:[&#34;假&#34],&#34; parametro4 [1] [P4]&#34;:[&#34; 3& #34],&#34; parametro4 [1] [P3]&#34;:[&#34; 2&#34],&#34; parametro1&#34;:[&#34; parametro1&#34; ]&#34; parametro4 [0] [P2]&#34;:[&#34; 1&#34],&#34; codigoCaja&#34;:[&#34;&#34],& #34; parametro5 [ARR2] [1] [0] [letraX]&#34;:[&#34; X&#34],&#34; numeroCheque&#34;:[&#34;&#34; ]&#34; facturasPagos&#34;:[&#34; 195310 | 234509&#34],&#34; rutCliente&#34;:[&#34; 154809597&#34],&#34;银行&# 34;:[&#34;&#34],&#34; caducidadMes&#34;:[&#34;&#34],&#34; parametro4 [0] [P1]&#34 ;: [&#34; 0&#34],&#34; parametro5 [ARR2] [1] []&#34;:[&#34; X&#34;&#34; X&#34],& #34; numeroTarjeta&#34;:[&#34;&#34],&#34; caducidadYear&#34;:[&#34;&#34],&#34; montoTotalPago&#34;:[& #34; 334772&#34],&#34; nombreTitular&#34;:[&#34;&#34],&#34; parametro5 [ARR2] [0] []&#34;:[&# 34;&#34;&#34; b&#34;&#34; C&#34],&#34; parametro3 []&#34;:[&#34;&#34;&# 34; b&#34;&#34; C&#34],&#34; parametro2 [atributo1]&#34; :&#34; atributo1&#34;]}&#34; responseStatus&#34;:&#34; OK&#34;}

唯一的细节是,数组和对象被解释为请求参数而不是真正的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;

我希望你能理解这个问题,并给我一个线索或解决方案。