dka*_*ras 6 java mixins jackson spring-boot jackson2
我为我的班级创建了一个 mixin。mixin 本身工作得很好,这不是大多数人在混合 faterxml/codehaus 注释时遇到的问题。我在单元测试中对其进行了测试,在使用 addMixIn 方法时“手动”创建 ObjectMapper - 它工作得很好。
我想使用该 mixin 来修改从 REST 端点返回的响应 json。我尝试以多种不同的方式自定义 Spring Boot 的 ObjectMapper:
构建器定制器:
@Bean
public Jackson2ObjectMapperBuilderCustomizer addMixin(){
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.mixIn(MyClass.class, MyClassMixin.class);
}
};
}
Run Code Online (Sandbox Code Playgroud)
建造者:
@Bean
Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
return new Jackson2ObjectMapperBuilder().mixIn(MyClass.class, MyClassMixin.class);
}
Run Code Online (Sandbox Code Playgroud)
转换器:
@Bean
public MappingJackson2HttpMessageConverter configureJackson(){
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(MyClass.class, MyClassMixin.class);
converter.setObjectMapper(mapper);
return converter;
}
Run Code Online (Sandbox Code Playgroud)
对象映射器:
@Autowired(required = true)
public void configureJackon(ObjectMapper jsonMapper){
jsonMapper.addMixIn(MyClass.class, MyClassMixin.class);
}
Run Code Online (Sandbox Code Playgroud)
这些都不起作用。
从 Spring Boot 2.7 开始,内置了对 mixins 的支持。
添加以下注释:
@JsonMixin(MyClass::class)
class MyClassMixin{
Run Code Online (Sandbox Code Playgroud)
将在自动配置的ObjectMapper.
这可能取决于 Spring Boot 版本,但根据自定义 Jackson ObjectMapper定义一个新Jackson2ObjectMapperBuilderCustomizerbean 就足够了
\n\ncontext\xe2\x80\x99s Jackson2ObjectMapperBuilder 可以通过一个或多个 Jackson2ObjectMapperBuilderCustomizer bean 进行定制。可以对此类定制器 bean 进行排序(Boot\xe2\x80\x99s 自己的定制器的顺序为 0),从而可以在 Boot\xe2\x80\x99s 定制之前和之后应用其他定制。
\n
| 归档时间: |
|
| 查看次数: |
9517 次 |
| 最近记录: |