如何在生成 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);
我试图在生成 Json 响应时隐藏 Pojo class 中的一些字段。假设我的 java class 中有 4 个变量。在第一个响应中,我需要在 json 对象中生成所有变量。对于下一个响应,我只需要 json 对象中的 3 个变量。
(隐藏部分可能在创建对象时实现,而不是在 class 实现中实现。)有没有办法做到这一点?
这可以通过 @JsonView
功能来实现。此功能允许您为给定的 class.
每个视图都是一个简单的标记 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);