ObjectMapper 的两个实例
Two instances of ObjectMapper
有没有办法为不同的目的创建两个 ObjectMapper 实例。
修改后的 ObjectMapper
@Component
class MyObjectMapper extends ObjectMapper{
public MyObjectMapper(){
super();
}
public MyObjectMapper(MyObjectMapper om) {
super(om);
}
@Override
public MyObjectMapper copy() {
return new MyObjectMapper(this);
}
}
现在使用如下
@Autowired ObjectMapper objectMapper; //performs standard serialization
@Autowire MyObjectMapper myMapper; //i can add custom filters in thiis mapper.
我尝试了类似的设置,但自定义映射器实际上影响了原始映射器所有 rest controllers
throw JSON parse error: Unrecognized field
编辑:不确定这一点是否很重要,但仍然添加它
我正在使用 spring-boot-starter-json
这正是您应该使用 @Qualifier
注释的地方。
This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring. It may also be used to annotate other custom annotations that can then in turn be used as qualifiers.
好的。结合 Aniket 的答案找出问题所在,仍在寻找更多解释。
而不是将 ObjectMapper 实例化为 new ObjectMapper()
。用 Mapper
构建它修复了它。
所以,两个有多个 ObjectMapper 实例
@Primary
@Bean
public ObjectMapper objectMapper(){
return new Jackson2ObjectMapperBuilder()
.build();
}
@Bean("customMapper")
public ObjectMapper customMapper(){
ObjectMapper customMapper = new Jackson2ObjectMapperBuilder().build();
mapper.<your customization , filters, providers etc;>
return mapper;
}
@Primary
将在所有默认情况下使用,即当您只是 @Autowire
或您的控制器将默认序列化应用于 Response/Request 主体时。
要使用自定义映射器,请明确使用 Bean ID。
@Autowired @Qualifier("customMapper") ObjectMapper mapper;
有没有办法为不同的目的创建两个 ObjectMapper 实例。
修改后的 ObjectMapper
@Component
class MyObjectMapper extends ObjectMapper{
public MyObjectMapper(){
super();
}
public MyObjectMapper(MyObjectMapper om) {
super(om);
}
@Override
public MyObjectMapper copy() {
return new MyObjectMapper(this);
}
}
现在使用如下
@Autowired ObjectMapper objectMapper; //performs standard serialization
@Autowire MyObjectMapper myMapper; //i can add custom filters in thiis mapper.
我尝试了类似的设置,但自定义映射器实际上影响了原始映射器所有 rest controllers
throw JSON parse error: Unrecognized field
编辑:不确定这一点是否很重要,但仍然添加它
我正在使用 spring-boot-starter-json
这正是您应该使用 @Qualifier
注释的地方。
This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring. It may also be used to annotate other custom annotations that can then in turn be used as qualifiers.
好的。结合 Aniket 的答案找出问题所在,仍在寻找更多解释。
而不是将 ObjectMapper 实例化为 new ObjectMapper()
。用 Mapper
构建它修复了它。
所以,两个有多个 ObjectMapper 实例
@Primary
@Bean
public ObjectMapper objectMapper(){
return new Jackson2ObjectMapperBuilder()
.build();
}
@Bean("customMapper")
public ObjectMapper customMapper(){
ObjectMapper customMapper = new Jackson2ObjectMapperBuilder().build();
mapper.<your customization , filters, providers etc;>
return mapper;
}
@Primary
将在所有默认情况下使用,即当您只是 @Autowire
或您的控制器将默认序列化应用于 Response/Request 主体时。
要使用自定义映射器,请明确使用 Bean ID。
@Autowired @Qualifier("customMapper") ObjectMapper mapper;