gpt4 book ai didi

java - 使用 jackson 忽略 json 正文中的空元素

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:50 24 4
gpt4 key购买 nike

我正在使用 java 中的 jackson 构建一个 json 主体。它会像下面这样

{
"subject": "math",
"marks": "100",
"student":{
"name": "x",
"class": "8"
}
}

基于不同的 REST URI,json 主体必须忽略某些字段或元素。如何使用 jackson 忽略上述 json 正文中的“学生”部分?当我忽略它时,我应该只能得到

{ "subject": "math", "marks": "100"}

但我得到的结果如下,这是不正确的-

{ "subject": "math", "marks": "100","student":{}}

我有两个包含 getter 和 setter 的类(class),一个作为主题,另一个作为学生。我尝试使用 @JsonIgnore 但它忽略了所有我不想要的 URI。我也试过@JsonInclude(Include.NON_EMPTY)。我如何实现这一点?

我在这里添加我的代码。基于不同的 REST URI,json 主体必须忽略某些字段或元素。例如,对于一个 URI,它应该包括所有字段,对于另一个它应该忽略学生。 分数score = new Score();

    score.setSubject("math");
score.setMarks("100");

Score.Student student =score.new Student();
score.setStudent(student);

switch (type) {
case StudentAdd:
score.setSubject("math");
score.setMarks("100");
break;
case StudentDelete:
score.setSubject("math");
score.setMarks("100");
break;
case StudentComplete:
score.setChangeReason("C");

default:
break;
score.setSubject("math");
score.setMarks("100");

score.setStudent(student);

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
//objectMapper.setSerializationInclusion(Include.NON_NULL);
objectMapper.setSerializationInclusion(Include.NON_EMPTY);

StringWriter jsonBody = new StringWriter();
objectMapper.writeValue(jsonBody, score);

return jsonBody.toString();
}

//@JsonInclude(Include.NON_EMPTY)
class Score {

private String subject;
private String marks;
private Student student;

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}

public String getMarks() {
return marks;
}

public void setMarks(String marks) {
this.marks = marks;
}

public Student getStudent() {
return student;
}

public void setStudent(Student student) {
this.student = student;
}

//@JsonInclude(Include.NON_NULL)
class Student {

private String name;

@JsonProperty("class")
private String clazz;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getClazz() {
return clazz;
}

public void setClazz(String clazz) {
this.clazz = clazz;
}

}
}
}
}

最佳答案

这可以使用 JsonInclude 的注释进行配置,其值为 NON_NULL 而不是 NON_EMPTY

NON_EMPTY 与 NON_NULL 的 Javadoc 不太清楚,但我的实验表明使用 NON_NULL 的效果与您预期的使用 Jackson 2.6.2 的效果相同。

@JsonProperty
@JsonInclude(Include.NON_NULL)
private Student student;

例子

ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Foo(100, new Student("bob"), "math")));
System.out.println(mapper.writeValueAsString(new Foo(100, null, "math")));

输出

{"marks":100,"subject":"math","student":{"name":"bob"}}
{"marks":100,"subject":"math"}

注意这也可以使用全局设置

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

关于java - 使用 jackson 忽略 json 正文中的空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42508734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com