避免使用特定值响应JSON字段

时间:2017-02-08 06:05:58

标签: java json jersey jackson

我正在使用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字段。 我查看了herehere等问题,但无法找到可用的答案。

例:
当John的得分为1时:{"name": "John", "score": 1}
当John的得分为0时:{"name": "John"}

2 个答案:

答案 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);
    }
}