如果不满足某些条件,我正在尝试序列化 Java POJO 并省略某些字段。
到目前为止,我的解决方案如下所示:
public class PermissionSerializer extends StdSerializer<Object> implements ContextualSerializer {
private String role;
public PermissionSerializer() {
super(Object.class);
}
public PermissionSerializer(String role) {
super(Object.class);
this.role = role;
}
@Override
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
String curRole = SomeContext.getCurrentRole();
if (curRole.equals(role)) {
jgen.writeObject(value);
return;
}
jgen.writeNull();
}
@Override
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
String unit = null;
AllowedFor ann = null;
if (property != null) {
ann = property.getAnnotation(AllowedFor.class);
}
if (ann != null) {
unit = ann.role();
}
return new PermissionSerializer(unit);
}
}
然后在 POJO 中我像这样使用它:
@JsonSerialize(using = PermissionSerializer.class)
@AllowedFor(role = "admin")
private String advancedField;
它确实有效,只是它可能不是实现我想要的最好的方式。然而,这种方法还有另一个问题。如果我们没有权限显示该字段,它会像null生成的 JSON 一样被序列化,即使我@JsonInclude(JsonInclude.Include.NON_NULL)在类级别上也是如此。
是否有可能完全忽略这个领域?或者也许有更好的方法有条件地忽略字段?
炎炎设计
拉丁的传说
相关分类