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

时间:2019-09-11 06:31:39

标签: java json spring serialization

我有一个用于Java类的Gender枚举(我无法编辑)。现在,当我需要将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;
   }
}

3 个答案:

答案 0 :(得分:0)

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

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

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

    @JsonValue
    String toValue() {
        return name;
    }
}

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

答案 1 :(得分:0)

(杰克逊2.6.2及更高版本),您现在可以简单地编写:

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

答案 2 :(得分:0)

如果enum具有toString()方法,该方法返回值,则

export IOT_SOLUTION_PATH=~/esp/esp-iot-solution

足够了。但是您的枚举没有,因为@Dinesh Kondapaneni提到您应该写一个自定义序列化程序,例如

mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);

并在您的MyObject中将其用作

class GenderSerializer extends JsonSerializer<Gender> {

@Override
public void serialize(Gender value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    if (null == value) {
    } else {
        try {
            gen.writeString(value.toValue());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
    }
}

}

仅供参考:我在这里使用杰克逊