【发布时间】:2016-11-11 03:08:01
【问题描述】:
我有以下枚举:
public enum NotificationType {
Store("S"),
Employee("E"),
Department("D"),
All("A");
public String value;
NotificationType(String value) {
this.value = value;
}
@Override
public String toString() {
return this.value;
}
@JsonCreator
public static NotificationType fromValue(String value) {
for (NotificationType type : NotificationType.values()) {
if (type.value.equals(value)) {
return type;
}
}
throw new IllegalArgumentException();
}
}
我创建了一个转换器,以便在将枚举保存到数据库时,它会保留值(S、E、D 或 A)而不是名称。我可以POST json 到带有值的控制器,它正确地绑定到对象。
但是,当我从 GET 呈现 JSON 时,它仍然显示名称(员工、商店等),我希望它仍然显示值。
【问题讨论】:
-
您标记了 Jackson,但我不确定您使用的是什么版本。我认为,如果您在 toString 上方使用 @JsonValue 进行注释,它将使用它作为枚举的值。或者您可以使用自定义序列化程序。
-
我会试试
@JsonValue并报告回来。谢谢! -
成功了!提交它作为答案,我会接受它。再次感谢。
-
只是想知道:您为什么要这样做?如果您担心使用 Store 与 S 对您来说是个问题;你不认为 JSON 本身可能已经是个问题了吗?就像:“天哪,我不介意使用包含太多开销的协议,但是哎呀,我的枚举,它们在那里占用了太多字节?”
-
提供与 XML 相同的数据,但格式更小,难道不是 JSON 的优势吗?如果在较差的网络条件下工作,他希望他的值尽可能小,这是有道理的。
标签: java json spring enums jackson