有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何从Java对象获取序列化JSON中的枚举值

我有一个性别枚举(我无法编辑),它在Java类中使用。现在,当我需要将Java类序列化为JSON时,我希望Enum的值作为JSON的一部分,而不是Enum名称。例如,在我的枚举中,当这个枚举被序列化时,我希望值为我正在使用的{"gender":"Male"}

String underWritingJSONString = objectMapper.writeValueAsString(myObject);

public enum Gender {
    MALE("Male"),
    FEMALE("Female");

    Gender(String gender) { 
        this.name = gender;
    }
    private String name; 

    String toValue() {
        return name;
    }
}

预期结果={"gender":"Male"}

当前结果={"gender":"MALE"}

下面是示例类

  public class MyObject {

    @JSONField
    public Gender gender;

    public MyObject() {

    }


    public Gender getGender() {
        return this.gender;
   }
}

共 (2) 个答案

  1. # 1 楼答案

    您需要添加带有注释@JsonValue的方法:

    enum Gender {
        MALE("Male"),
        FEMALE("Female");
    
        Gender(String gender) { // constructor
            this.name = gender;
        }
        private String name; // variable
    
        @JsonValue
        String toValue() {
            return name;
        }
    }
    

    将对象序列化为JSON时,将调用此方法

  2. # 2 楼答案

    (Jackson 2.6.2及以上)你现在可以简单地写:

    public enum Gender {
     @JsonProperty("Male")
     MALE,
     @JsonProperty("Female")
     FEMALE
      }