Есть ли способ прописать значение JSON в верхнем регистре до его привязки - используя SpringBoot? - PullRequest
0 голосов
/ 14 сентября 2018

Я работаю над сервисом SpringBoot REST. Служба REST работает, когда пользовательский интерфейс отправляет правильные значения JSON (отформатированные).

Иногда команда пользовательского интерфейса забывает в верхнем регистре значение свойства и вызывает исключение. Я хочу, чтобы служба REST обрабатывала такие случаи.

Свойство JSON размещается как

"category":"patient"

Предполагается поместить в верхний регистр.

"category":"PATIENT"

Категория свойств объекта Java - это ENUM

public enum StaffCategory {
    PATIENT, EQUIPMENT
}

Объект модели пользовательского интерфейса

@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]

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вам не нужно преобразовывать его в верхний регистр, потому что это снижает удобочитаемость и снижает удобство обслуживания. Вам нужно всего лишь изменить определение 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; }
}

Таким образом, его легко десериализоватьне ломая ваш код и не сталкиваясь с какими-либо проблемами.

0 голосов
/ 16 сентября 2018

Хотя команда UI должна придерживаться спецификаций API бэкэнда, вы все равно можете использовать конфигурацию ObjectMapper для преодоления этого конкретного сценария:

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS, true);
    return mapper;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...