【问题标题】:Java map object to several variants JSONJava 将对象映射到几个变体 JSON
【发布时间】:2019-02-08 07:32:58
【问题描述】:

如何在没有链 DOMAIN_OBJECT->DTO->JSON 的情况下将域对象映射到多个变体 JSON 对象(多个 DTO)?我有一个大的域对象和十多个表示变体。当我使用 structMap 将域对象映射到特定的 DTO,然后使用 jackson 对 JSON 进行序列化时,我花了很多时间。

是否有任何工具可以将域对象映射到没有中间层 DTO 的多个变体 JSON?

【问题讨论】:

    标签: java json serialization jackson


    【解决方案1】:

    我不太了解您的用例,但请注意,如果您使用 Jackson,我想您使用的是 ObjectMapperObjectMapper 是一个昂贵的对象,你应该尽可能地重用它(ergo,声明它staticfinal),因为当同一个对象被转换很多次时,它会在后台进行大量缓存。

    更好的是,从ObjectMapper 获取ObjectWriter 和/或ObjectReader,它们是不可变且线程安全的(如果您想在运行时更改其配置,ObjectMapper 会很棘手),它们应该会提高您的性能.

    最后一件事,但我从未走得那么远,您可以编写自定义序列化器/反序列化器,但我发现复杂性明显增加(因此,维护起来会更加困难)。

    如果您使用字符串,请仔细检查您是否使用了 StringBuilder(或多线程用例中的 StringBuffer)并仅在必要时记录 (if(logger.isDebugEnabled() { log.debug(...) }),它们是降低性能的常见缺陷。

    【讨论】:

    • 如果 OP 不愿意编写 DTO 并使用 MapStruct,我几乎不认为自定义 Jackson 序列化器和反序列化器会成为他的选择。
    【解决方案2】:

    这真的取决于你的十多个变体是什么样的。有时,坚持 DTO 可能是最好的方法,如 answer 中所述,其中 DTO 用于定义 REST API 的合同。

    或者,根据您的需要,您可以使用来自 Jackson 的 @JsonView。使用弹簧?这个answer 可能会给你一些见解。

    【讨论】:

      猜你喜欢
      • 2014-08-03
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      相关资源
      最近更新 更多