如何使用 Jackson 构造不区分大小写的枚举?

dnj*_*ead 1 java json jackson

我想让所有枚举对象都大写。如何使其不区分大小写?

HTTP 主体JsonNode,然后节点到类对象:

JsonNode asJson = request().body().asJson();
WhatsappIncomingMessageVO requestVO = JsonParserUtils.fromJson(asJson, WhatsappIncomingMessageVO.class);
Run Code Online (Sandbox Code Playgroud)

JSON 具有小写字符串“location”,我想将其与以下枚举的 LOCATION 进行映射,该类包含一个枚举,即:

public enum WhatsAppMessageType {

    TEMPLATE("TEMPLATE"),
    TEXT("TEXT"),
    IMAGE("image"), 
    VIDEO("video"), 
    AUDIO("audio"),
    @JsonProperty("json")
    LOCATION("location");
    
Run Code Online (Sandbox Code Playgroud)

小智 12

如果您使用杰克逊......我想是的,有多种解决方案

1. 在 @JsonProperty 中使用注释:

@JsonAlias({"location", "LOCATION", "Location"}) 
Run Code Online (Sandbox Code Playgroud)

2.编写自定义JsonDeserializer:

使用 ,JsonDeserializer您可以实现任何您想要的逻辑

3. 对您的字段使用 @JsonFormat注释

@JsonFormat(with = JsonFormat.Feature.ACCEPT_CASE_INSENSITIVE_PROPERTIES) 
Run Code Online (Sandbox Code Playgroud)

4. 以编程方式设置所有字段的格式:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
Run Code Online (Sandbox Code Playgroud)