Java映射对象到几种变体JSON

时间:2019-02-08 07:32:58

标签: java json serialization jackson

如何在没有链DOMAIN_OBJECT-> DTO-> JSON的情况下将域对象映射到几个不同的JSON对象(几个DTO)?我有一个大的领域对象和十多个表示形式。当我使用structMap将域对象映射到特定的DTO,然后使用杰克逊将序列化到JSON时,我花费了大量时间。

是否有用于将域对象映射到服务器变体JSON而没有中间层DTO的工具?

2 个答案:

答案 0 :(得分:1)

这实际上取决于您的十多个变体是什么样的。有时,坚持使用DTO可能是最好的方法,如本answer中所述,其中DTO用于定义REST API的约定。

或者,根据您的需要,您可以和Jackson的@JsonView一起玩。使用Spring? answer可能会给您一些见识。

答案 1 :(得分:1)

我真的不知道您的用例,但是请注意,如果您使用杰克逊,我想您正在使用ObjectMapperObjectMapper是一个昂贵的对象,您应该尽可能地重用(ergo,将其声明为staticfinal),因为当同一个对象在后台进行大量缓存时,转换了很多次。

更好的是,从ObjectWriter获得ObjectReader和/或ObjectMapper,它们是不可变的且线程安全的(如果要在运行时更改其配置,ObjectMapper会很棘手) ,它们应该可以改善您的效果。

最后的事情,但我从未走过那么远,您可以编写自定义序列化器/反序列化器,但是我看到复杂性明显上升了(因此,维护起来会更加困难)。

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