Java 使用jackson转换时,POJO具有空值
我试图寻找一个答案,但意识到有多个类似的,但没有一个匹配这个 我有一个具有这种结构的JSON对象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
{
"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解析库要复杂得多。