Java 如何只包含Jackson要序列化的对象的某些属性和字段?
我有一个需要序列化的类,它包含很多属性和字段,但我只需要序列化一小部分,而不是整个类。我还想保证,我不会在将来无意中添加将被序列化的字段,也不会因为突然包含新内容而打破我对序列化内容的期望 那么,我是否可以使用任何注释来基本上指定仅序列化的内容Java 如何只包含Jackson要序列化的对象的某些属性和字段?,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我有一个需要序列化的类,它包含很多属性和字段,但我只需要序列化一小部分,而不是整个类。我还想保证,我不会在将来无意中添加将被序列化的字段,也不会因为突然包含新内容而打破我对序列化内容的期望 那么,我是否可以使用任何注释来基本上指定仅序列化的内容 我需要@jsonignoreperties的反面。充当白名单而不是黑名单的东西。没有这样的注释,您必须对不需要的属性使用@JsonIgnoreProperties。您可以从类中引入一个新类 MyClass您的原始类 MyClassForJson您选择的具
我需要@jsonignoreperties的反面。充当白名单而不是黑名单的东西。没有这样的注释,您必须对不需要的属性使用
@JsonIgnoreProperties
。您可以从类中引入一个新类
MyClass
您的原始类
MyClassForJson
您选择的具有属性的类的分支
仅将第二类用于序列化。也许你可以在序列化之前进行强制转换。
这样,您的json就不会发生意外的更改。还没有对此进行测试,但您应该能够禁用JsonAutoDetect,然后手动注释每个属性
请参见到目前为止,我更喜欢使用包装器对象来实现此白名单效果(在我的情况下,额外的复杂性是,我要有选择地序列化的POJO是对象层次结构的一部分,因此不可能使用视图) 如果
MyClass
是原始类,而MyClassForJson
是包装器,我就是这样使用它的:
public class MyClassForJson {
private MyClass wrapped;
public MyClassForJson(MyClass toBeWrapped) {
this.wrapped = toBeWrapped;
}
/**
* Delegate method exposing a property
*/
public String getExposedProperty() {
return this.wrapped.getExposedProperty();
}
}
现在,无论我向MyClass
添加了多少属性,序列化时只有我为其创建委托getter方法的属性才会暴露给Jackson。目前大多数IDE都可以为包装类的选定属性自动生成委托方法
如果我想用不同的方式序列化
MyClass
的不同白名单属性集,我所要做的就是创建不同的包装类。我能够使用@JsonView
注释来实现这一点
注释用于指示由被注释的方法或字段定义的属性所属的视图
您可以对视图使用任何类,但我更喜欢在一个位置创建它们:
public class JsonViews {
public static class Small {}
public static class Medium extends Small {}
}
然后在课堂上:
public class User {
@JsonView(JsonViews.Small.class)
private Integer id;
@JsonView(JsonViews.Medium.class)
private String name;
// email does not have a view, by default it will be in any view
private String email;
...
}
然后我们可以将视图类传递到ObjectMapper
mapper.writerWithView(clazz);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
如果不希望在JSON中定义没有视图的属性,请确保配置ObjectMapper
mapper.writerWithView(clazz);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
@NeilMcGuigan它对我不起作用,因为我需要在要序列化的类上指定它,而不是在ObjectMapper上。也许你可以使用
模块
和mixin?我确认它可以与@JsonAutoDetect(getervisibility=Visibility.NONE)
和@JsonProperty