当前位置: 首页 > 知识库问答 >
问题:

如何使用Jackson创建不变的DTOs而不添加注释?

羊舌炯
2023-03-14

Jackson可以将JSON数据反序列化为不可变的对象。但是默认情况下,必须使用@jsonproperty@constructorproperties指定构造函数或静态工厂方法参数。我如何配置Jackson和编译器,以便不需要这些注释?当使用Spring Boot时,我如何最好地配置这些?

共有1个答案

黎曾笑
2023-03-14

需要三件事:

  • 不可变DTO需要使用Javac的-parameters标志编译。
  • ParameterNamesModule需要向Jackson的ObjectMapper注册
  • 一种特殊情况是DTO构造采用单个结构化类型(例如列表或映射)。在本例中,Jackson使用了一种所谓的“委托”模式,这种模式在本例中是不需要的。这可以通过配置ObjectMapper:Mapper.setConstructorDetector(USE_PROPERTIES_BASED)来改变。从Jackson 2.12开始就支持这一点。

在Spring Boot中,前两个设置是默认设置,因此不需要更改。第三个配置可以通过提供Jackson2ObjectMapperBuilderCustomizerbean来完成:

@Bean public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
  return builder -> builder.postConfigurer(mapper -> mapper.setConstructorDetector(USE_PROPERTIES_BASED));
}
 类似资料:
  • 我试图用mutate向dataframe添加一个新列,但没有将该变量作为dataframe中的一个新列添加(这正是我想要做的)。 我有一个带有字符变量的数据帧,并通过组合mutate和str_detect创建了一个新的逻辑变量,当包含在中时,该变量将为: 结果是使用新变量IBULLOFEN,但代码没有将该变量添加到数据帧中。如何使用此代码将新变量添加到dataframe中,而不是创建TIBBLE?

  • 我想创建一个集合而不在其中创建任何文档。但不是先创建文档,然后删除文档。我尝试了一些方法,但当我删除文档时,我的集合也被删除了。 Firestore图像

  • 我目前正在迭代一个数组,其中每个索引包含两个节点和一个关系(第1部分)- 我读了这篇文章,但我不明白如何实现它,使两个相同的节点具有相同的ID。我现在的代码是这样的: 创建两个节点 创造他们的关系 将关系添加到节点 坚持使用Neo4jTemplate.save() 我需要更改什么以合并而不是创建?我是否需要在持久化之前进行检查,或者在持久化SDN 4时是否有方法进行检查? 编辑: 我决定使用Neo

  • 我已经尝试创建自定义序列化程序,但我无法在那里获得字段名。 在GSON中,我使用了,但Jackson没有这样的功能。有对等的吗?

  • 我试图使用Gson发送JsonObjects作为响应。这些JsonObjects是手工构造的,而不是使用objectMapper或GSON。我排除了所有与杰克逊有关的依赖关系。它工作得很好很好。后来,我尝试使用SpringFox添加Swagger文档。现在它抛出以下异常:

  • 我花了过去的一天,试图找到一个解决办法,但没有找到任何在线资源,解决了这个问题。 我使用Gson为我的应用程序进行消息转换,它在单元测试之外工作得很好。我甚至添加了bean以优先于Jackson而不是将配置值写入。这只在运行应用程序时起作用。 现在我的问题是,如何使用的Gson序列化/反序列化?我有一个带有批注的类,它的值与实际名称不同。我最接近找到答案的是下面的一个,但没有任何帮助: https