Java 将对象映射到 JSON 的几种变体

标签 java json serialization jackson

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

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

最佳答案

我不太了解您的用例,但请注意,如果您使用 Jackson,我假设您正在使用 ObjectMapperObjectMapper 是一个昂贵的对象,您应该尽可能多地重用它(因此,将其声明为 staticfinal),因为它做了很多事情当同一个对象被转换很多次时,在后台进行缓存。

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

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

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

关于Java 将对象映射到 JSON 的几种变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54587827/

相关文章:

C# 套接字发送序列化数据

java - Java中的二项式检验

javascript - JSONPath 作为单独的 JSON 排除

json - 使用路径检索json中的子级

php - 在数据库中存储数组

c# - 具有 "self-creating"属性的对象的自定义 JSON 序列化以无限循环结束

java - 如果单击 JDialog 之外则 JDialog 关闭

java - Android编辑文本属性

java - 我希望从 Java 中的匹配模式中提取值

javascript - 如何按整数列对 json 对象进行排序,例如 "3"、 "2"、 "5"