POJO имеют нулевые значения при конвертации с Джексоном - PullRequest
1 голос
/ 15 мая 2019

Я пытался найти ответ на этот вопрос, но понял, что есть несколько похожих, но ни один не соответствует этому.

У меня есть объект JSON с этой структурой

{
  "model": {
     "serie" : "123456",
      "id" : "abc123"
    /// many fields
  },
  "externalModel": {
    "serie" : "123456",
    "fieldX" : "abcde"
   // many fields as well
}

, и яя делаю это в моем коде:

 ObjectMapper mapper = new ObjectMapper();
 MyObject object = mapper.readValue(hit.getSourceAsString(), MyObject.class);

, где MyObject имеет эту форму:

@JsonInclude(value = JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)

public class MyObject {


    @JsonProperty("serie")
    String serie;

    @JsonProperty("id")
    Long id;

    MyObject() {}
   }

Когда я конвертирую, я не получаю никаких исключений, а вместо этого я получаю myObject со всемизначения установлены на null

Я понятия не имею, что может быть не так, поскольку не возвращено исключение, любая идея?

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Вам необходимо использовать корневое свойство model,

Вы можете переименовать MyObject в MyModel и создать MyObject

@JsonInclude(value = JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyObject{
    @JsonProperty("model")
    MyModel model;
}

и затем проверьте model

1 голос
/ 15 мая 2019

На самом деле, вам нужно два объекта в MyObject.

@JsonInclude(value = JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyModel {

    @JsonProperty("id")
    private String id;

    @JsonProperty("serie")
    private String serie;

   //Generate getters and setters of these two

}

@JsonInclude(value = JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ExternalObject {

    @JsonProperty("serie")
    private String serie;

    @JsonProperty("fieldX")
    private String fieldX;

   //Generate getters and setters of these two
}

@JsonInclude(value = JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyObject{

    @JsonProperty("model")
    private MyModel model;

    @JsonProperty("externalModel")
    private ExternalObject externalModel;

   //Generate getters and setters of these two  
}

Теперь, когда вы используете его, как показано ниже, он будет работать нормально.

ObjectMapper mapper = new ObjectMapper();
MyObject object = mapper.readValue(hit.getSourceAsString(), MyObject.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...