情况:
跟后台交互的时候,发现传过去的数据中有个 \u003d
这是我传的参数 :
query=[{property:"chengShi.id",operator:"=",value:1}]
这是后台接收到的参数:
query=[{"property":"chengShi.id","value":1,"operator":"\u003d"}]
很明显,是 = 出错了,因为要传的是对象,我把它封装在Map中了,再用Gson转换,这是我的代码:
Map query = new HashMap();
query.put("property", "shangPinDM");
query.put("operator", "=");
query.put("value", id);
OkHttpGo.<String>post(API.CHECK_PRODUCT)
.params("query", "[" + MyJson.toJson(query) + "]")
.execute(new DialogCallback<String>(this).......
注意这段代码 MyJson.toJson(query),MyJson中封装的是Gson。所以问题就出在Gson转换过程中。
原因:
Gson默认是进行HTML ESCAPE,也就是转码, 比如我们 \t 表示换行符。因此对象中有=时,Gson就会把=转码,而 = 转码就是 \u003d 。如下图,使用站长之家的在线转换工具可以看到 = 转成Unicode编码之后就是 \u003d
解决
既然Gson默认会进行HTML ESCAPE(转码),我们设置不让Gson转码就可以了,具体代码如下:
// 创建一个不进行HtmlEscaping的Gson对象
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String json = gson.toJson(query);
原文地址