我正在尝试使用jsckson构建json解析器。下面是我的枚举类代码:
public enum Priority {
@JsonProperty("LOW")
LOW(100),
@JsonProperty("MEDIUM")
MEDIUM(200),
@JsonProperty("HIGH")
HIGH(300);
private int priority;
Priority(int i) {
this.priority = i;
}
public int getPriority() {
return priority;
}
}
现在我希望我的解析器只能输入3个“HIGH”,“LOW”和“MEDIUM”输入。但它也取得了序数值。 例如:如果我的输入是:
{
"priority": 0
}
它取低优先级而不是错误。
我该怎么办?
答案 0 :(得分:2)
添加以下Bean Config:
@Bean
public Jackson2ObjectMapperBuilderCustomizer enableFailOnNumbersForEnums() {
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.featuresToEnable(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS);
}
这将阻止Jackson将序数反序列化为Enum值。您可以在此处阅读有关启用/禁用的可用功能的更多信息:https://github.com/FasterXML/jackson-databind/wiki/Deserialization-Features
答案 1 :(得分:0)
您还可以配置在我的情况下有效的ObjectMapper
:
@Configuration
public class ObjectMapperConfiguration {
@Bean
public ObjectMapper objectMapperBean() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, true);
return mapper;
}
}
结果是相同的-Jackson不再接受枚举的序数值。