Я создал класс enumerated, который содержит 2 значения. Я хочу создать controller, который возвращает существующие перечисления вместе с их значениями.
Это мой класс Enum:
@Getter
public enum ModesEnum {
ASSOCIATED ("A", "Associated"), DISASSOCIATED ("D", "Disassociated");
private String key;
private String value;
private ModesEnum(String key, String value) {
this.key = key;
this.value = value;
}
@JsonValue
public String getValor() {
return value;
}
@JsonValue
public String getKey() {
return key;
}
private static final Map<String, String> mapClassEnum;
static {
mapClassEnum = new HashMap<>();
Arrays.stream(values()).forEach(elem -> {
mapClassEnum.put(elem.getValue(), elem.getKey());
mapClassEnum.put(elem.getValue(), elem.getValor());
});
}
Мой класс контроллера:
@GetMapping(value = "/modesEnum")
public ResponseEntity<ModesEnum[]> getAll(){
return new ResponseEntity<>(ModesEnum.values(), null, HttpStatus.OK);
}
однако при выполнении контроллера выдает следующую ошибку:
Problem with definition of AnnotedClass ModesEnum Multiple 'as-value' properties defined ModesEnum #getKey() vs ModesEnum [0]
Как я могу вернуть в моем controller что-то подобное JSON?:
{
{ key: "A", value : "Associated"},
{ key: "D", value : "Disassociated"}
}




В документации JsonValue сказано, что только один метод может быть аннотирован с помощью @JsonValue.
Этой аннотацией можно пометить не более одного метода класса; если найдено более одного, может быть выдано исключение.
Вы можете попытаться сериализовать как key, так и value в методе toString() (аннотировать toString() с помощью @JsonValue).
Другим вариантом может быть использование @JsonProperty в ваших экземплярах перечисления:
@JsonProperty("associated")
ASSOCIATED ("A", "Associated"),
@JsonProperty("disassociated")
DISASSOCIATED ("D", "Disassociated");
У вас есть два разных поля, помеченных
@JsonValue. Разве у вас не должно быть только одно определение как таковое, чтобы гарантировать, что оно станет вашим значением перечисления при десериализации? На это, похоже, указывает сообщение об ошибке.