Dam*_*eev 3 java spring jackson objectmapper jackson-databind
我试图使用Jackson2ObjectMapperBuilderCustomizer将自定义问题处理程序添加到对象映射器:
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder builder) {
ObjectMapper m = builder.build();
m.addHandler(
new DeserializationProblemHandler() {
@Override
public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<?> deserializer, Object beanOrClass, String propertyName) throws IOException {
System.out.println("ahahahaa");
return super.handleUnknownProperty(ctxt, p, deserializer, beanOrClass, propertyName);
}
}
);
}
};
}
Run Code Online (Sandbox Code Playgroud)
但是当我自动装配ObjectMapper bean时,_problemHandlers属性为null。
我也尝试过使用以下命令自定义现有的ObjectMapper:
@Autowired
public customize(ObjectMapper mapper) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是结果是一样的。我不知道谁可以删除此属性。我根本不会在另一个地方初始化对象映射器的其他构建器/工厂/等。我做错了什么?
无法通过或直接将a添加DeserializationProblemHandler
到。调用构建器是不可行的,因为结果对于该方法而言是局部的:Spring本身将稍后调用,从而创建另一个实例。ObjectMapper
Jackson2ObjectMapperBuilder
Jackson2ObjectMapperBuilderCustomizer
build()
ObjectMapper
build()
ObjectMapper
但是,可以通过注册Jackson模块来做到这一点:
modules()
方法setupModule()
,该SetupContext
实例具有一个addDeserializationProblemHandler()
方法然后这应该工作
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder builder) {
builder.modules(new MyModule());
}
};
}
private static class MyModule extends SimpleModule {
@Override
public void setupModule(SetupContext context) {
// Required, as documented in the Javadoc of SimpleModule
super.setupModule(context);
context.addDeserializationProblemHandler(new MyDeserializationProblemHandler());
}
}
private static class MyDeserializationProblemHandler extends DeserializationProblemHandler {
@Override
public boolean handleUnknownProperty(DeserializationContext ctxt,
JsonParser p,
JsonDeserializer<?> deserializer,
Object beanOrClass,
String propertyName)
throws IOException {
System.out.println("ahahahaa");
return super.handleUnknownProperty(ctxt, p, deserializer, beanOrClass, propertyName);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
388 次 |
最近记录: |