如何用jackson反序列化空字符串?

时间:2018-05-09 11:03:32

标签: java jackson

我想用Jackson反序列化一个json,我想将空字符串映射到STANDARD枚举类型。

当我尝试将JsonProperty用于空字符串时,它会忽略空值并抛出异常;

value not one of declared Enum instance names:......,STANDARD,...

有没有办法解决这个问题?

public enum Type{

    @JsonProperty("")
    STANDARD,

    @JsonProperty("complex")
    COMPLEX,

    ....

}

我的json;

....
"type": "",
....

2 个答案:

答案 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_NULLJsonInclude.Include.NON_EMPTY

例如: -

@JsonInclude(JsonInclude.Include.NON_NULL) STANDARD