Как десериализовать пустые строки с Джексоном? - PullRequest
0 голосов
/ 09 мая 2018

Я хочу десериализовать json с Джексоном и сопоставить пустые строки с типом перечисления STANDARD.

Когда я пытаюсь использовать JsonProperty с пустой строкой, он игнорирует пустое значение и выдает исключение;

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

Есть ли способ справиться с этим?

public enum Type{

    @JsonProperty("")
    STANDARD,

    @JsonProperty("complex")
    COMPLEX,

    ....

}

Мой JSON;

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

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

@JsonValue добьется цели:

public enum Type {

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

    private String value;

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

    @JsonValue
    public String getValue() {
        return value;
    }
}

Цитирование соответствующих частей из документации @JsonValue:

Маркерная аннотация, которая указывает, что значение аннотированного метода доступа (либо метод field, либо метод "getter" [метод с недействительным типом возврата, без аргументов]) должен использоваться вместо одного значения для сериализации для экземпляра, вместо этого обычного метода сбора свойств стоимости. [...]

Этой аннотацией может быть помечено не более одного метода доступа класса; если найдено более одного, может быть выдано исключение. [...]

ПРИМЕЧАНИЕ: при использовании для перечислений Java одной дополнительной особенностью является то, что значение, возвращаемое аннотированным методом, также считается значением для десериализации, а не только строкой JSON для сериализации. Это возможно, так как набор значений Enum является постоянным и возможно определить отображение, но не может быть сделано вообще для типов POJO; как таковой, он не используется для десериализации POJO.

0 голосов
/ 09 мая 2018

Вы можете попробовать использовать аннотацию @JsonInclude, чтобы игнорировать пустые значения, и использовать JsonInclude.Include.NON_NULL или JsonInclude.Include.NON_EMPTY, если хотите

например: -

@JsonInclude(JsonInclude.Include.NON_NULL) STANDARD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...