java - 在 Java 中将枚举序列化为 JSON
问题描述
我有一个 Javaenum
存储不同的状态:
public enum BusinessCustomersStatus {
A("active", "Active"),
O("onboarding", "Onboarding"),
NV("not_verified", "Not Verified"),
V("verified", "Verified"),
S("suspended", "Suspended"),
I("inactive", "Inactive");
@Getter
private String shortName;
@JsonValue
@Getter
private String fullName;
BusinessCustomersStatus(String shortName, String fullName) {
this.shortName = shortName;
this.fullName = fullName;
}
// Use the fromStatus method as @JsonCreator
@JsonCreator
public static BusinessCustomersStatus fromStatus(String statusText) {
for (BusinessCustomersStatus status : values()) {
if (status.getShortName().equalsIgnoreCase(statusText)) {
return status;
}
}
throw new UnsupportedOperationException(String.format("Unknown status: '%s'", statusText));
}
}
当我想将项目列表放入页面中以获取值时,该代码运行良好,fullName
因为我使用了@JsonValue
注释。
我有一个需要获取shortValue
此代码的案例:
return businessCustomersService.findById(id).map( businessCustomers -> businessCustomersMapper.toFullDTO(businessCustomers));
但我明白了fullValue
。你知道单行我如何映射shortValue
吗?
解决方案
我建议将其序列化为对象。这可以通过@JsonFormat
类级别的注释来完成:
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum BusinessCustomersStatus {
A("active", "Active"),
O("onboarding", "Onboarding"),
//...
@Getter
private String shortName;
@Getter
private String fullName;
//...
序列化此枚举时,这将导致以下结果BusinessCustomersStatus.A
:
{"shortName":"active","fullName":"Active"}
或者,您可以将status
字段定义为String
:
public class BusinessCustomersFullDTO {
private long id;
private String name;
private String businessType;
private String status;
}
并像这样映射它的值:
businessCustomersFullDTO.status(businessCustomers.getStatus().getShortName());
推荐阅读
- python - 在 C++ 中解析基于位的消息
- javascript - Vue 渲染按钮
- javascript - 将鼠标悬停在页面底部时,Qtip 会在页面底部显示文本
- c++ - 防止 qDebug() 写入标准输出
- symfony - Symfony Doctrine 获取最近的对象结果:Having 子句
- android - 我们可以通过应用程序本身获取应用程序用户的评分(评论)吗?
- php - 如何使用 PHP 和本地节点区块链执行 CURL POST?
- python - speedml 不适用于 py-xgboost / conda 安装的 py-xgboost 无法被 pip 识别
- intellij-idea - 如何为 create idea 插件添加 com.intellij.javascript.nodejs?
- mysql - 数据库设计 - 自定义和预定义属性