繁体   English   中英

在使用SpringBoot绑定之前,有没有办法将JSON值大写?

[英]Is there a way to upper case a JSON value before binding it - using SpringBoot?

我正在使用SpringBoot REST服务。 当UI发送正确的JSON值(格式化)时,REST服务即可工作。

有时,UI团队会忘记大写一个属性值并导致异常。 我想让REST服务处理这种情况。

JSON属性被发布为

"category":"patient"

应该以大写形式发布。

"category":"PATIENT"

Java对象属性类别是ENUM

public enum StaffCategory {
    PATIENT, EQUIPMENT
}

ui模型对象

@JsonProperty("category")
private StaffCategory category;

@JsonProperty("category")
public StaffCategory getCategory() {
    return category;
}

@JsonProperty("category")
public void setCategory(StaffCategory category) {
    this.category = category;
}

@JsonProperty("category")
private StaffCategory category;

这是我得到的错误

    Can not deserialize value of type model.constants.StaffCategory 
from String "patient": value not one of declared Enum instance names: [PATIENT, EQUIPMENT]

尽管UI团队应该坚持使用后端API规范,但是您仍然可以使用ObjectMapper配置来克服此特定情况:

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS, true);
    return mapper;
}

您不需要将其转换为大写字母,因为它会降低可读性并避免可维护性。您只需将Enum定义更改为:

public enum StaffCategory {
    PATIENT("patient"), EQUIPMENT("equipment");

    private String value;
    private StaffCategory(String value) { this.value = value; }

    @JsonValue
    public String getValue() { return this.value; }
}

这样,它很容易反序列化而不会破坏您的代码或面临任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM