使用ESAPI编码器编码JSON

时间:2014-12-19 06:16:08

标签: java esapi

我在服务器端编码了JSON(使用ESAPI编码器)。然后客户端检索bean的字段并进行进一步处理。

在服务器端

JSONBean bean=new JSONBean();
//populate the bean
Gson gson=new Gson();
String jsonString = gson.toJson(bean);
String JSEscapedStr=ESAPI.encoder().encodeForJavaScript(jsonString);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(JSEscapedStr);

编码的JSON字符串

\ x7B \ x22name \ X22 \ X3A \ x22Sameer \ X22,\ x22company \ X22 \ X3A \ x22Company \ X22,\ x22designation \ X22 \ X3A \ x22Developer \ X22 \ x7D

在客户端

   var JSONObj=JSON.parse(data);
    var name=JSONObj["name"];
    var company=JSONObj["company"];
    var designation=JSONObj["designation"];
    //process these variable in javascript

我也尝试过使用response.setContentType(“plain / text”);在服务器端也无法正常工作。

错误

SyntaxError:JSON.parse:当内容类型为“plain / text”时,JSON数据第1行第1列的意外字符

如果我对json String进行硬编码,那么它可以正常工作

            var jsonEncoded="\x7B\x22name\x22\x3A\x22Sameer\x22,\x22company\x22\x3A\x22Company\x22,\x22designation\x22\x3A\x22Developer\x22\x7D";
            var JSONObj=JSON.parse(jsonEncoded);
            console.log(JSONObj);
            var name=JSONObj["name"];
            var company=JSONObj["company"];
            var designation=JSONObj["designation"];
            console.log(name);
            console.log(company);
            console.log(designation);

1 个答案:

答案 0 :(得分:1)

  1. 你应该只编写有效载荷(应该已经完成​​了bei Gson本身)而不是整个JSon树。
  2. ESAPI.encoder().encodeForJavaScript旨在为JavaScript方法/函数编码参数或函数参数。