我正在使用Jersey和Jackson构建一个Web应用程序。将使用类似于下面的代码片段的逻辑返回响应。 (不相关的部分被删除)
public Response toResponse() {
String name = // some methods to get name
Integer score = // some methods to get score
final MyDTO dto = new MyDTO(name, score);
return Response
.ok()
.encoding(StandardCharsets.UTF_8.toString())
.type(MediaType.APPLICATION_JSON_TYPE)
.entity(dto)
.build();
}
MyDTO
类:
@XmlRootElement
public final class MyDTO {
@NotNull final private String name;
@NotNull final private Integer score;
// constructor, getters, setters...
}
我被允许在MyDTO中只有非空值。
我想要实现的是当score
完全等于0时,在JSON响应中隐藏score
字段。
我查看了here和here等问题,但无法找到可用的答案。
例:
当John的得分为1时:{"name": "John", "score": 1}
当John的得分为0时:{"name": "John"}
答案 0 :(得分:2)
使用@Henrik的答案将注释更改为JsonInclude.Include.NON_DEFAULT。希望这是你所期待的
答案 1 :(得分:0)
决定尝试@ BalakrishnaAvulapati的提议,这看起来肯定是正确的做法。
@JsonInclude(JsonInclude.Include.NON_NULL)
public static class Player {
private String nick;
private Integer score;
// Omitting getter/setter for nick field
public Integer getScore() {
return score;
}
public void setScore(int score) {
this.score = score == 0 ? null : Integer.valueOf(score);
}
}