如何在生成 JSON 响应时隐藏 Pojo 类 中的特定变量

How to hide specific variables in Pojo classes while generating JSON responses

我试图在生成 Json 响应时隐藏 Pojo class 中的一些字段。假设我的 java class 中有 4 个变量。在第一个响应中,我需要在 json 对象中生成所有变量。对于下一个响应,我只需要 json 对象中的 3 个变量。

(隐藏部分可能在创建对象时实现,而不是在 class 实现中实现。)有没有办法做到这一点?

这可以通过 @JsonView 功能来实现。此功能允许您为给定的 class.

定义多个 "views" = 属性集

每个视图都是一个简单的标记 class。为了方便起见,您可以将它们全部放在一个包装器 class 中(它甚至可以是 pojo class 本身)

public class PojoViews {
    public static class Response1{}
    public static class Response2{}
    public static class Response3{}
}

视图 classes 被指定为要包含在序列化中的每个属性的注释

public class Pojo {

    @JsonView({PojoViews.Response1.class, PojoViews.Response2.class, PojoViews.Response3.class})
    public String attr1;
    @JsonView({PojoViews.Response1.class, PojoViews.Response2.class, PojoViews.Response3.class})
    public int attr2;
    @JsonView({PojoViews.Response1.class, PojoViews.Response2.class})
    public double attr3;
    @JsonView(PojoViews.Response1.class)
    public boolean attr4;
}

在运行时,您可以指定一个特定的视图来生成所需的 af 属性集

ObjectMapper mapper = new ObjectMapper();
Class<?> view = Pojo.Response2.class;  // runtime assignment of view
mapper.writerWithView(view).writeValue(System.out, pojo);