我有一个用于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;
}
}
答案 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 {
}
}
}
}
仅供参考:我在这里使用杰克逊