我想用Jackson反序列化一个json,我想将空字符串映射到STANDARD枚举类型。
当我尝试将JsonProperty用于空字符串时,它会忽略空值并抛出异常;
value not one of declared Enum instance names:......,STANDARD,...
有没有办法解决这个问题?
public enum Type{
@JsonProperty("")
STANDARD,
@JsonProperty("complex")
COMPLEX,
....
}
我的json;
....
"type": "",
....
答案 0 :(得分:3)
@JsonValue
可以解决问题:
public enum Type {
STANDARD(""),
COMPLEX("complex");
private String value;
StatusType(String value) {
this.value = value;
}
@JsonValue
public String getValue() {
return value;
}
}
从@JsonValue
文档中引用相关部分:
标记注释,指示带注释的访问器的值(字段或“getter”方法[具有非void返回类型的方法,无args])将用作实例序列化的单个值,而不是通常的收集价值属性的方法。 [...]
一个类的最多一个访问器可以使用此注释进行注释;如果找到多个,则可能抛出异常。 [...]
注意:当用于Java枚举时,另外一个特性是带注释的方法返回的值也被认为是要反序列化的值,而不仅仅是要序列化的JSON字符串。这是可能的,因为Enum值的集合是常量并且可以定义映射,但是对于POJO类型通常不能完成;因此,这不用于POJO反序列化。
答案 1 :(得分:0)
您可以尝试使用@JsonInclude
注释来忽略空值,并根据需要使用JsonInclude.Include.NON_NULL
或JsonInclude.Include.NON_EMPTY
例如: -
@JsonInclude(JsonInclude.Include.NON_NULL)
STANDARD