我需要通过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和网上冲浪中搜索过,我找不到最好的方法)。
答案 0 :(得分:1)
parameterMap 值是一个数组对象,而不是字符串:
返回:包含参数名称作为键的不可变java.util.Map 和参数值作为地图值。参数图中的键是 类型为String。 参数映射中的值的类型为String 阵列强>
所以你需要对它进行编码,只需遍历地图并将参数名称/值放在对象中。
答案 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;
我希望你能理解这个问题,并给我一个线索或解决方案。