Как десериализовать альтернативные значения для поля enum из JSON-запроса REST API?
Модель запроса REST API имеет одно поле перечисления:
public enum CommentContext {
STUDENT_FEEDBACK,
STUDENT_QUESTION;
}
Теперь я хочу удалить префикс STUDENT_ из значения enum, но не нарушая существующие вызовы API.
Я пытался использовать @JsonAlias, вот так:
public enum CommentContext {
@JsonAlias ("{FEEDBACK, STUDENT_FEEDBACK}")
FEEDBACK,
@JsonAlias ("{QUESTION, STUDENT_QUESTION}")
COMMENT;
}
Но API завершается с ошибкой 400 Bad Request, когда STUDENT_FEEDBACK передается как значение этого поля перечисления в запросе JSON.
Можно ли десериализовать этот объект CommentContext из JSON для любого из альтернативных значений этого поля перечисления, таких как FEEDBACK или STUDENT_FEEDBACK?
1 ответ
Вы можете сделать это используя @JsonCreator. Здесь я дал решение для вашей проблемы:
public enum CommentContext {
STUDENT_FEEDBACK,
STUDENT_QUESTION;
@JsonCreator
public static CommentContext setValue(String key){
Optional<CommentContext> commentContext = Arrays.stream(CommentContext.values())
.parallel()
.filter(ct -> ct.toString().equals(key) || ct.toString().substring(8).equals(key))
.findAny();
return commentContext.orElse(null);
}
}
Вы также можете увидеть эту ссылку