Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jackson转换时,POJO具有空值_Java_Json_Jackson_Deserialization - Fatal编程技术网

Java 使用jackson转换时,POJO具有空值

Java 使用jackson转换时,POJO具有空值,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我试图寻找一个答案,但意识到有多个类似的,但没有一个匹配这个 我有一个具有这种结构的JSON对象 { "model": { "serie" : "123456", "id" : "abc123" /// many fields }, "externalModel": { "serie" : "123456", "fieldX" : "abcde" // many fields as well } 我在我的代码中这样做: Obje

我试图寻找一个答案,但意识到有多个类似的,但没有一个匹配这个

我有一个具有这种结构的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() {}
   }
当我转换时,我没有得到任何异常,而是得到所有值都设置为null的myObject


我不知道会出什么问题,因为没有返回异常,知道吗?

您需要使用root属性
model

您可以将
MyObject
重命名为
MyModel
并创建
MyObject

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

然后检查
model

实际上,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);

“系列”和“id嵌套在”模型中“在json中,而不是在object中,它们不匹配。您的json有两个对象模型和externalModel,但您正在尝试将其映射到具有序列号和id的MyObject。
MyObject
与整个JSONI的结构不匹配有没有办法忽略父对象?@jpganz18 jackson不会让您做任何您想做的事情。Jackson假设您制作JSON和类,以便以相同的方式对它们进行建模。如果他们没有,这对你没有帮助。“进行映射”的唯一方法是强制转换器停止工作,这比使用简单的JSON解析库要复杂得多。