Как десериализовать enum с разным форматом json для объектов используя jackson?
Нужно десериализовать объект enum который может прийти в формате
{"id": 1, "type": "First"}
или в виде
{"FIRST"}
в составе другого объекта. Сейчас это работает для одного вида json. Как это можно сделать и возможно ли?
@AllArgsConstructor
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum PriorityTypeDto {
FIRST(1, "First"),
SECOND(2, "Second"),
THIRD(3, "Third");
private final Integer id;
private final String type;
@JsonCreator
public static PriorityTypeDto forValues(@JsonProperty("id") Integer id) {
return Arrays.stream(PriorityTypeDto.values())
.filter(priority -> priority.id.equals(id))
.findFirst()
.orElseThrow(() -> new CustomException();
}
}