如何使用Jackson创建不带注释的不可变dto ?



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

序列化Java 17的记录时,不需要进一步的步骤,因为记录存储了它们的组件的名称。但是,当序列化普通类时,需要三个配置:

  • 不可变DTO需要使用javac的-parameters标志进行编译。
  • ParameterNamesModule需要被需要注册到Jackson的ObjectMapper
  • 特殊情况是DTO结构采用单一结构化类型(例如List或Map)。在这种情况下,杰克逊使用了所谓的"授权"。模式,在这种情况下是不需要的。这可以通过配置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));
}

最新更新