java - 如何从 REST API 的 JSON 请求中反序列化枚举字段的替代值?
问题描述
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 而失败。
是否可以从 JSON 反序列化此 CommentContext 对象,以获取此枚举字段的任一替代值,例如 FEEDBACK 或 STUDENT_FEEDBACK?
解决方案
您可以使用@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);
}
}
你也可以看到这个链接
推荐阅读
- angular-cli - 默认/开发的 Angular CLI 文件替换
- c++ - 如何在继承的类/结构中添加联合成员
- c# - 在将 .csv 文件中的数据读取到 DataTable 中时,有没有办法强制所有列都是字符串?
- javascript - 停止表单提交
- java - 如何在android中生成用户ID
- java - 对象数组的概念问题
- sql-server - 如何使用 SqlIaasExtension 扩展启用 SQL 身份验证
- javascript - 为什么这个 Vue 计算属性不是响应式的?
- python - 用空字符串替换 None 值
- dart - 我应该更喜欢迭代 Map.entries 还是 Map.values?