Jersey 客户端发送 application/json 类型的字符串
Jersey client send string with application/json type
我需要使用 Jersey client 1.19
和 genson 1.3
发送一个已经是 JSON
格式的字符串
Client.create().resource(path).webResource.type(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE).put(ClientResponse.class, jsonAsString)
这个问题是客户端正在解析字符串,我需要它按原样发送。
我正在发送类似 { "name":"Foo" }
的内容,客户端正在将其转换为 "{ \"name\":\"Foo\" }"
。如果我将类型更改为 PLAIN_TEXT
它会正确发送请求,但我需要将其发送为 application/json
.
尝试将 MediaType.APPLICATION_JSON_TYPE
更改为 MediaType.APPLICATION_JSON
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/
我用 Jersey 1.19、Genson 1.3 和 Wireshark 试过你的代码。它在没有 Genson 的情况下工作正常,因此 Genson 似乎将其视为文字字符串(因为它的类型为 String
),因此引用了双引号。
以下作品。
String jsonAsString = "{ \"name\":\"Foo\" }";
Map<String, String> map = (new Genson()).deserialize(jsonAsString, Map.class);
String path = "...";
ClientResponse resp =
Client.create().resource(path)
.type(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.put(ClientResponse.class, map);
我使用了 Map,因为它对于示例来说已经足够了,但您可以将其反序列化为适当的对象。
如果您正在寻找一个选项来指定应按原样传递字符串,我还不知道,但这至少应该为将字符串作为 application/json 发送的问题提供解决方案.
所以是的,Genson 会尝试将您的字符串编码为文字 json 字符串。在这种情况下,它可能不是您想要的,但更普遍的是人们所期望的:serialize à java string as a json string.
当输入类型为字符串时,我看到的解决方案过于扩展 GensonJsonConverter 并将 isWritable 覆盖为 return false。然后注册它。那应该可以。
我已打开 this issue,因此可以将其添加为更灵活的功能。
我需要使用 Jersey client 1.19
和 genson 1.3
JSON
格式的字符串
Client.create().resource(path).webResource.type(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE).put(ClientResponse.class, jsonAsString)
这个问题是客户端正在解析字符串,我需要它按原样发送。
我正在发送类似 { "name":"Foo" }
的内容,客户端正在将其转换为 "{ \"name\":\"Foo\" }"
。如果我将类型更改为 PLAIN_TEXT
它会正确发送请求,但我需要将其发送为 application/json
.
尝试将 MediaType.APPLICATION_JSON_TYPE
更改为 MediaType.APPLICATION_JSON
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/
我用 Jersey 1.19、Genson 1.3 和 Wireshark 试过你的代码。它在没有 Genson 的情况下工作正常,因此 Genson 似乎将其视为文字字符串(因为它的类型为 String
),因此引用了双引号。
以下作品。
String jsonAsString = "{ \"name\":\"Foo\" }";
Map<String, String> map = (new Genson()).deserialize(jsonAsString, Map.class);
String path = "...";
ClientResponse resp =
Client.create().resource(path)
.type(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.put(ClientResponse.class, map);
我使用了 Map,因为它对于示例来说已经足够了,但您可以将其反序列化为适当的对象。
如果您正在寻找一个选项来指定应按原样传递字符串,我还不知道,但这至少应该为将字符串作为 application/json 发送的问题提供解决方案.
所以是的,Genson 会尝试将您的字符串编码为文字 json 字符串。在这种情况下,它可能不是您想要的,但更普遍的是人们所期望的:serialize à java string as a json string.
当输入类型为字符串时,我看到的解决方案过于扩展 GensonJsonConverter 并将 isWritable 覆盖为 return false。然后注册它。那应该可以。
我已打开 this issue,因此可以将其添加为更灵活的功能。