Почему JsonCreator не работает с JSONFormat shape OBJECT - PullRequest
0 голосов
/ 30 апреля 2020

Это могло быть рассмотрено в других топиках StackOverflow c, но я хотел бы знать причину и почему он работает.

Код выглядит ниже:

@Document
@JsonFormat(shape= JsonFormat.Shape.OBJECT)
@JsonAutoDetect()
public enum Compass {
    north("Upper Center"),
    south("Lower Center"),
    east("Left Center"),
    west("Right Center"),
    ne("Upper Right"),
    nw("Upper Left"),
    se("Lower Right"),
    sw("Lower Left"),
    ;

    @JsonProperty   
    private String presentableName;
    @JsonProperty   
    private String name;

    private Compass() {}
    private Compass(String presentableName) {
        this.presentableName = presentableName;
    }

    public String getPresentableName() {
        return presentableName;
    }
    public void setPresentableName(String presentableName) {
        this.presentableName = presentableName;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    @JsonCreator
    public static Compass fromObject(@JsonProperty("name") String name) { 
       return Compass.sw;
    }
}

Десериализация не работает с приведенным выше кодом.

вложенным исключением является org.springframework.http.converter.HttpMessageNotReadableException: JSON ошибка синтаксического анализа: невозможно создать экземпляр Compass (хотя существует хотя бы один создатель): нет конструктора аргумента строки или метода фабрики для десериализовать из строкового значения ('STRING'); вложенное исключение: com.faster xml .jackson.databind.ex c .MismatchedInputException

Теперь, если я использую приведенный ниже код с @JsonCreator, он работает нормально.

@JsonCreator
    public static TesterEnum fromObject(final Map<String, Object> obj) {
        if (obj != null && obj.containsKey("id")) {
            Integer id = null;
            if (obj.get("id") instanceof Integer) {
                id = (Integer)obj.get("id");
            } else {
                id = Integer.parseInt((String)obj.get("id"));
            }
            return fromId(id);
        }
        return null;
    }

Мои вопросы:

  1. Почему работает вторая реализация?
  2. Как работает JsonCreator? Как это получить значения в параметре метода fromObject
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...