如何用杰克逊反序列化空字符串?

hel*_*one 7 java jackson

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

当我尝试将JsonProperty与空字符串一起使用时,它将忽略空值并引发异常;

value not one of declared Enum instance names:......,STANDARD,...
Run Code Online (Sandbox Code Playgroud)

有什么办法可以解决这个问题?

public enum Type{

    @JsonProperty("")
    STANDARD,

    @JsonProperty("complex")
    COMPLEX,

    ....

}
Run Code Online (Sandbox Code Playgroud)

我的json;

....
"type": "",
....
Run Code Online (Sandbox Code Playgroud)

cas*_*lin 5

@JsonValue 将达到目的:

public enum Type {

    STANDARD(""),
    COMPLEX("complex");

    private String value;

    StatusType(String value) {
        this.value = value;
    }

    @JsonValue
    public String getValue() {
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

引用@JsonValue文档中的相关部分:

标记注释,指示带注释的访问器的值(字段或“ getter”方法[具有非无效返回类型的方法,无args]方法)将用作实例序列化的单个值,而不是通常的值收集价值属性的方法。[...]

Class这个注释最多可以注释a个访问者;如果发现多个,则可能引发异常。[...]

注意:当用于Java枚举时,一个附加功能是带注释的方法返回的值也被视为要反序列化的值,而不仅仅是序列化为JSON字符串的值。这是可能的,因为Enum值的集合是恒定的,并且可以定义映射,但是通常不能对POJO类型执行此操作。因此,这不用于POJO反序列化。