【问题标题】:Jersey client send string with application/json typeJersey 客户端发送带有 application/json 类型的字符串
【发布时间】:2015-11-06 21:37:34
【问题描述】:

我需要使用Jersey client 1.19genson 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

【问题讨论】:

  • 当您说客户正在转换时,您在哪里看到转换?在服务器上?
  • 我正在用wireshark嗅探它。

标签: java json jersey genson


【解决方案1】:

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

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

我已打开this issue,因此可以将其添加为更灵活的功能。

【讨论】:

  • 独立的文字 JSON 字符串不会总是无效的 JSON 吗?它应该是 JSON 对象或 JSON 数组吧?因此,如果类型是“application/json”并且数据类型是String,那么总是按原样发送不是更好吗?我还没有看到 Genson 代码,但我的意思是当它被 post()put() 拦截时。
  • json 规范有一个更新版本,它允许任何类型的值作为根元素,而不仅仅是对象和数组。查看问题以获得更新的解决方案。
【解决方案2】:

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

【讨论】:

  • 我得到与 MediaType.APPLICATION_JSON 相同的行为
【解决方案3】:

我用 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 发送的问题提供一个解决方案。

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多