有时客户端发送json rpc请求,json值为unicorde符号。例子:
{ "jsonrpc": "2.0", "method": "add", "params": { "fields": [ { "id": 1, "val": "\u0414\u0435\u043d\u0438\u0441" }, { "id": 2, "val": "\u041c\u043e\u044f" } ] }, "id": "564b0f7d-868a-4ff0-9703-17e4f768699d" }
如何处理json rpc请求:
我的服务器得到如下请求 byte[]
;
将其转换为 io.vertx.core.json.JsonObject
;
进行一些操作;
保存到数据库;
我在数据库记录中发现:
"val": "\u0414\u0435\u043d\u0438\u0441"
最糟糕的是。如果客户试图搜索这些数据,他将得到:
"val": "\\u0414\\u0435\\u043d\\u0438\\u0441"
所以我认为,我需要在反序列化到jsonobject之前转换请求数据。我试过了,但没用:
String json = new String(incomingJsonBytes, StandardCharsets.UTF_8);
return json.getBytes(StandardCharsets.UTF_8);
我也试着用 StandardCharsets.US_ASCII
.
注:带有 StringEscapeUtils.unescapeJava()
我不能,因为它取消了所有必要和不必要的“\”符号。
如果有人知道怎么解决?或者是图书馆?非常感谢。
1条答案
按热度按时间plupiseo1#
io.vertx.core.json.JsonObject
取决于JacksonObjectMapper
执行实际的json反序列化(例如。io.vertx.core.json.Json
有一个ObjectMapper
字段)。默认情况下,jackson将转换\u0414\u0435\u043d\u0438\u0441
进入Денис
. 您可以通过一个简单的代码段来验证这一点:很可能客户端正在发送其他内容,因为您的示例值已正确反序列化。也许是双重逃脱了
\\u0414\\u0435\\u043d\\u0438\\u0441
jackson将转换为的值\u0414\u0435\u043d\u0438\u0441
移除一层逃逸?没有什么神奇的解决办法。要么编写自己的jackson反序列化配置,要么让客户端停止发送垃圾。