Джексон ObjectMapper: readValue возвращает null

Мне нужно разобрать этот json:

{
   "id":"cpd4-b39c4b2a-b5cb-4581-b519-6034aaa7fe4e",
   "transactionId":"768a9be4-b5b3-452f-9bd3-9fff2e9ace5c",
   "status":"PUBLIC",
   "confidential":true,
   "expiringAt":1231231,
   "locked":true,
   "metadata":[
      {
         "user":"admin",
         "creationTimestamp":1538578453285,
         "value":"metadata"
      }
   ],
   "security":"read",
   "timestampCreation":1538578453285,
   "userCreation":"admin",
   "appCreation":"app",
   "document":{
      "id":null,
      "transactionId":"768a9be4-b5b3-452f-9bd3-9fff2e9ace5c",
      "docId":"68aab3799a9380fe82ed43ff2d46a5b07da1b270-1282",
      "size":1282,
      "name":"pom.xml",
      "alias":"alias",
      "hash":"68aab3799a9380fe82ed43ff2d46a5b07da1b270",
      "title":"title",
      "encoding":"UTF-8",
      "mimeType":"application/xml"
   }
}

к объекту класса Reference:

public class Reference {

    private String id;
    private String transactionId;

    private DocumentStatus status;
    private Boolean confidential;
    private Integer expiringAt;
    private Boolean locked;

    private List<Metadata> metadata;
    private String security;

    // IDReferenciaAlta
    private Date timestampCreation;
    private String userCreation;
    private String appCreation;

    private Date timestampModified;
    private String userModified;
    private String appModified;

    private Date timestampDeletion;
    private String userDeletion;
    private String appDeletion;

    //getters and setters...
}

где Metadata - это:

public class Metadata {

    private String user;
    private Date creationTimestamp;
    private String value;

    //getters an setters
}

В настоящее время я использую этот код:

Reference reference = null;
try {
    reference = this.mapper.readValue(jsonDocument, Reference.class);
} catch (IOException e1) {
    // TODO: Throw domain exception...
    e1.printStackTrace();
}

Проблема в том, что this.mapper.readValue(...) возвращает null.

Я знаю, что схема json и свойства класса Reference не совсем совпадают, но я ожидал получить ссылку с "общими" свойствами json.

А как насчет узла document?

ToYonos 04.10.2018 12:14

Пожалуйста, поделитесь трассировкой стека

Roberto Manfreda 04.10.2018 12:16

Если вы хотите игнорировать данные документ, попробуйте добавить @JsonIgnoreProperties ({"документ"}) в свой класс Ссылка

Alpesh Jikadra 04.10.2018 12:31

что такое DocumentStatus -> частный статус DocumentStatus;

Sayantan Mandal 04.10.2018 13:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
13 510
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Без трассировки стека мы почти не понимаем, в чем заключается ошибка. Однако из того, что можно увидеть в этом вопросе, свойство document не отображается ни в какое поле класса Reference.

Так что вы можете либо:

  • Сопоставьте свойство document с полем.

  • Используйте @JsonIgnoreProperties("document") в классе Reference, чтобы игнорировать свойство document. В качестве альтернативы вы можете использовать @JsonIgnoreProperties(ignoreUnknown = true), чтобы игнорировать любые неизвестные свойства.

  • Настройте ObjectMapper на игнорирование неизвестных свойств, отключив DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES. См. Ниже:

    ObjectMapper mapper = new ObjectMapper();
    mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    Reference reference = mapper.readValue(jsonDocument, Reference.class);
    

Другие вопросы по теме