Java 严格执行Spring引导JSON枚举反序列化,这样它就不会将无效值静默地转换为null

Java 严格执行Spring引导JSON枚举反序列化,这样它就不会将无效值静默地转换为null,java,spring,spring-boot,enums,json-deserialization,Java,Spring,Spring Boot,Enums,Json Deserialization,我正在使用JavaSpringBoot@RestController和一个包含枚举字段的对象。 Spring自动将JSON反序列化到MyRequest对象 @RestController 公共类MyController{ @后期映射(路径=“/operation”) 公共响应属性操作(@Valid@RequestBody MyRequest){ ... } } 公共类MyRequest{ 私有髓鞘1区1; 私有MyEnum2字段2; 私人MyEnum3领域3; 私有MyEnum4字段4; 私有M

我正在使用JavaSpringBoot@RestController和一个包含枚举字段的对象。 Spring自动将JSON反序列化到
MyRequest
对象

@RestController
公共类MyController{
@后期映射(路径=“/operation”)
公共响应属性操作(@Valid@RequestBody MyRequest){
...
}
}
公共类MyRequest{
私有髓鞘1区1;
私有MyEnum2字段2;
私人MyEnum3领域3;
私有MyEnum4字段4;
私有MyEnum5字段5;
私人髓鞘6;
…//确实有很多不同的枚举字段!
}
公共枚举MyEnum1{
VAL1,VAL2,VAL3;
}
问题是,如果JSON包含的
enum
字段的值完全无效,反序列化程序会毫无例外地将其静默转换为
null

{
“字段1”:“BLAHBLAH”,
...
}
这是对用户不友好和背信弃义的

我知道我可以为每个枚举编写自定义JSON反序列化程序,但解决方案既繁琐又不优雅


是否有办法将JSON枚举反序列化器全局设置为“严格模式”,因此如果该值无效,它会引发异常?如果是,如何以及在何处?

默认情况下应禁用该功能

但是,如果要显式设置,可以这样做:

在您的物业中:

spring.jackson.deserialization.read-unknown-enum-values-as-null=false
或者作为配置类中的替代方案(实际上,任何bean都可以工作,只要确保它发生得更早):


因为默认情况下它应该是这样的,我想知道为什么它不适合你。你在什么地方启用了它吗?您使用的是哪个Spring Boot版本?

是的,您是对的!我真的在我们的代码库中找到了一个自定义配置:
featuresToEnable(新对象[]{DeserializationFeature.READ\u UNKNOWN\u ENUM\u VALUES\u AS\u NULL})
。我没有意识到这一点。谢谢!
@Autowired
public void configureJackson(ObjectMapper objectMapper) {
   objectMapper.disable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL);
}