1

我需要使用and发送一个已经JSON格式化的字符串Jersey client 1.19genson 1.3

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.

4

3 回答 3

1

所以是的,Genson 会尝试将您的字符串编码为文字 json 字符串。在这种情况下,它可能不是您想要的,但更普遍的是人们所期望的:将 à java 字符串序列化为 json 字符串。

我看到的解决方案是过度扩展GensonJsonConverter并覆盖 isWritable 以在输入类型为字符串时返回 false。然后只需注册它。那应该行得通。

我已经打开了这个问题,以便可以将其添加为更灵活的功能。

于 2015-08-14T20:09:26.410 回答
0

尝试更改MediaType.APPLICATION_JSON_TYPEMediaType.APPLICATION_JSON http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/

于 2015-08-13T19:14:10.533 回答
0

我用 Jersey 1.19、Genson 1.3 和 Wireshark 试过你的代码。它在没有 Genson 的情况下工作正常,因此看起来 Genson 将其视为文字字符串(因为它是 type 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 发送的问题提供一个解决方案。

于 2015-08-14T16:01:53.870 回答