Получить значение @JsonProperty, установленное в перечислении

Как получить значение, установленное в аннотации @JsonProperty?

Я хочу иметь возможность тестировать значения JSON конечной точки REST. Я хотел использовать существующее перечисление вместо жесткого кодирования строки. Кажется, я не могу понять, как получить значение, установленное в аннотации @JsonProperty. ?

import com.fasterxml.jackson.annotation.JsonProperty;

public enum StatusType {
    @JsonProperty("unknown")
    UNKNOWN,
    @JsonProperty("warning")
    WARNING,
    @JsonProperty("success")
    SUCCESS,
    @JsonProperty("error")
    ERROR,
    @JsonProperty("info")
    INFO
}

В идеале я бы хотел сделать что-то вроде:

 mvc.perform(get("/status"))
            .andExpect(jsonPath("status").value(StatusType.INFO))
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
2 086
1

Ответы 1

Вы можете использовать следующее (не забудьте обработать исключения):

String value = StatusType.class.getField(StatusType.INFO.name()) 
                         .getAnnotation(JsonProperty.class).value();

В качестве альтернативы, в зависимости от ваших потребностей, вы можете определить свое перечисление следующим образом, используя @JsonValue:

public enum StatusType {

    UNKNOWN("unknown"),
    WARNING("warning"),
    SUCCESS("success"),
    ERROR("error"),
    INFO("info");

    private String value;

    StatusType(String value) {
        this.value = value;
    }

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

Тогда вы можете использовать:

String value = StatusType.INFO.getValue();

Для обратной задачи (т.е. получения Enum из JsonProperty) можно использовать следующий метод: stackoverflow.com/questions/64415585/…

epol 18.10.2020 18:23

Другие вопросы по теме