【问题标题】:How is javax.ws.rs.client.Entity serializing objects to json?javax.ws.rs.client.Entity 如何将对象序列化为 json?
【发布时间】:2015-10-01 12:14:16
【问题描述】:

Entity.json(T entity) 使用什么序列化器来序列化/反序列化对象?是否可以使用自定义序列化程序?

在我的情况下,序列化是错误的,因为我的对象包含具有 Guava Optional 数据类型的字段,并且不存在的值返回为 {"present":false} 而不是 null

【问题讨论】:

    标签: java json serialization optional


    【解决方案1】:

    JAX-RS 没有指定 JSON 序列化程序,它取决于您的配置。例如,Jersey JAX-RS 允许多个 (https://jersey.java.net/documentation/latest/media.html),包括

    • 莫西
    • 用于 JSON 处理的 Java API (JSON-P)
    • 杰克逊
    • 抛弃

    但更好的解决方案是不要对字段使用Optional(Guava 或 Java 8)。见http://blog.joda.org/2014/11/optional-in-java-se-8.html

    我唯一担心的是 Optional 会被过度使用。请专注于使用 它作为返回类型(来自执行一些有用的 功能)请不要将其用作 Java-Bean 的字段。

    【讨论】:

    • 谢谢,我配置了 Jackson Guava 模块,现在可以正常工作了。我已经阅读了您之前提到的文章,但 Optional 对于 API 表示类中的字段不合理吗?实现我的客户端的人会明确指出某个字段可以这样为空(例如 ErrorCode)
    • 也与 Optional 的使用相关(甚至来自 Brian Goetz 的回应):stackoverflow.com/questions/26327957/…
    【解决方案2】:

    不能直接解决您的问题。我建议你使用 Googles Gson 作为解析器。它非常灵活且可配置。

    Tutorial

    它还会跳过空白字段,因此 json 大小不会太大。

    【讨论】:

    • 谢谢,但我正在使用 Jackson 自带的 Dropwizard
    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多