停止使用jackson接受json解析中enum的序数值

时间:2018-01-09 09:36:53

标签: java jackson

我正在尝试使用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
}

它取低优先级而不是错误。

我该怎么办?

2 个答案:

答案 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不再接受枚举的序数值。