【问题标题】:Wanting to get Enum Value instead of name in JSON想要在 JSON 中获取枚举值而不是名称
【发布时间】: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


【解决方案1】:

因为你的toString方法返回了你想用来表示你的枚举的值,你可以用@JsonValue注解它,告诉Jackson这个返回值代表的是枚举的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2012-12-28
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多