【发布时间】:2015-12-10 10:18:55
【问题描述】:
给定一个这样的 JSON 映射类:
public class Person {
@JsonProperty
String getName() { ... }
@JsonProperty @JsonView(SpecialView.class)
String getId() { ... }
}
当使用“正常”序列化(即未指定视图)时,我只需要包含name 属性,并在使用SpecialView 进行序列化时包含这两个属性。但是当我这样做时
objectMapper.writeValueAsString(object)
(即,未指定 any 视图),包含id 属性。
如果我这样做
objectMapper..writerWithView(Object.class).writeValueAsString(object)
然后它的行为符合预期。问题是,我无法控制所有进行序列化的代码,所以我不能强制所有代码都指定一个视图。
当我单步执行 Jackson 源代码 (v 2.5.4) 时,我发现如果没有“活动视图”,com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields() 不会使用 _filteredProps:
if (_filteredProps != null && provider.getActiveView() != null) {
props = _filteredProps;
} else {
props = _props;
}
当没有指定视图时,序列化不尊重@JsonView 似乎很奇怪。我错过了什么吗?
有没有办法实现我想要的?
【问题讨论】:
标签: jackson