【问题标题】:Send JSON by ajax and get parameters by request in JSP通过ajax发送JSON并在JSP中通过请求获取参数
【发布时间】:2015-07-22 02:42:43
【问题描述】:

我需要通过 ajax(使用 Jquery)发送一个 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 对象,是这样的,但是,响应是这样的:

{"param1":[Ljava.lang.String;@182f12f,"param2":[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 和网上冲浪中进行了搜索,但找不到最好的方法)。

【问题讨论】:

    标签: java jquery ajax json jsp


    【解决方案1】:

    我已经通过这种方式解决了这个问题(几乎完全没有):

    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":["false"],"parametro4[1][p4] ":["3"],"parametro4[1][p3]":["2"],"parametro1":["parametro1"],"parametro4[0][p2]":["1"], "codigoCaja":[""],"parametro5[arr2][1][0][letraX]":["x"],"numeroCheque":[""],"facturasPagos":["195310|234509" ],"rutCliente":["154809597"],"banco":[""],"caducidadMes":[""],"parametro4[0][p1]":["0"],"parametro5[arr2 ][1][]":["x","x"],"numeroTarjeta":[""],"caducidadYear":[""],"montoTotalPago":["334772"],"nombreTitular": [""],"parametro5[arr2][0][]":["a","b","c"],"parametro3[]":["a","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;
    

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

    【讨论】:

      【解决方案2】:

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

      返回:包含参数名称作为键的不可变 java.util.Map 和参数值作为映射值。参数映射中的键是 字符串类型。 参数映射中的值是String类型 数组

      javadoc for getParameterMao

      因此您需要对其进行编码,只需遍历地图并将参数名称/值放入对象中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-21
        • 2016-06-22
        • 1970-01-01
        • 2017-11-16
        • 2017-02-06
        • 1970-01-01
        • 2016-02-09
        相关资源
        最近更新 更多