我在这件事上卡住了,我想更好地澄清它
JacksonObjectMapper的默认行为是在任何Java字段中不能绑定的json属性前抛出异常。
// json to bind in java entity
{ "name":"mike", "surname":"parker", "age":19 }
// java entity
class Hero {
String name;
String surname;
}
// default mapper from Jackson
private final ObjectMapper objectMapper = new ObjectMapper();
// this will fail for Unrecognized field "age"
Hero spiderMan = objectMapper.readValue(json, Hero.class);
字符串
为了避免无法识别的字段异常,我应该配置JacksonMap器忽略属性
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
型
在API文档的另一边,我读到Spring Integration JsonToObjectTransformer()默认使用JsonObjectMapperProvider工厂来获取JacksonJSON-processor的示例。奇怪的事实是,即使两者都假设以相同的方式行事,似乎他们实际上并不这样做。JsonToObjectTransformer()允许无法识别的json属性“age”,并且不会抛出任何异常。没有其他Map器在上面声明,所以我希望使用默认的JacksonMap器。
// same json coming from inputChannel but no exception is thrown and binding will success
@Bean
@Transformer(inputChannel = "myInputChannel", outputChannel = "myOuputChannel")
JsonToObjectTransformer jsonToObjectTransformerHero() {
return new JsonToObjectTransformer(Hero.class);
}
型
是我误解了什么,还是他们实际上以不同的方式行事?
2条答案
按热度按时间gudnpqoy1#
查看实际内部
ObjectMapper
的初始化方式。看起来它被预先配置为忽略未知属性:字符串
bfnvny8b2#
如果使用Sping Boot 它有一些默认设置:
*反序列化特性.FAIL_ON_UNKNOWN_PROPERTIES
所以它们的行为略有不同