【发布时间】:2020-02-13 12:55:33
【问题描述】:
有没有办法为不同的目的创建两个 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 抛出 JSON parse error: Unrecognized field
编辑:不确定这一点是否非常重要,但仍在添加
我正在使用spring-boot-starter-json
【问题讨论】:
-
“自定义映射器实际上会影响原始映射器”您实际上定义了两个
ObjectMapper组件,还是 sn-p 的映射器是您拥有的唯一组件? -
Mapper 是我唯一拥有的组件。原因是,将过滤器添加到 Autowired ObjectMapper 会永久应用更改。但我只需要在某些地方进行特殊的序列化。我可以在需要时做一个“新”,但我正在寻找一些干净的东西
-
我不明白你在说什么。据我所知,如果这是您与
ObjectMapper相关的唯一配置,那么@Autowired ObjectMapper和@Autowired MyObjectMapper是完全相同的bean。您需要声明两个组件 bean:一个用于“干净”映射器,另一个 bean 用于自定义映射器。由于他们都是自动接线候选人,因此您需要对两者都进行资格认证并声明您要尝试自动接线(或对其中一个进行初步处理)。就像您在回答中所做的那样。 -
@Prokhorov 首先,MyObjectMapper 和 ObjectMapper 不是完全相同的 bean。使它相同的是你正在调用的'new ObjectMapper()',这是因为,我使用了一个自动的'Spring Boot Starter Json'。如果你使用标准的杰克逊和'@Bean',这可能会变得不那么模棱两可自己。
标签: java json spring-boot jackson objectmapper