REST API的请求模型具有一个枚举字段:
public enum CommentContext {
STUDENT_FEEDBACK,
STUDENT_QUESTION;
}
现在,我想从枚举值中删除STUDENT_前缀,但又不破坏API的现有调用方。
我试图像这样使用@JsonAlias:
public enum CommentContext {
@JsonAlias ("{FEEDBACK, STUDENT_FEEDBACK}")
FEEDBACK,
@JsonAlias ("{QUESTION, STUDENT_QUESTION}")
COMMENT;
}
但是,当STUDENT_FEEDBACK作为请求JSON中该枚举字段的值传递时,API失败,并显示400 Bad Request。
是否可以针对此枚举字段的替代值(例如FEEDBACK或STUDENT_FEEDBACK)从JSON反序列化此CommentContext对象?
答案 0 :(得分:0)
您可以使用@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);
}
}
您还可以看到此link