gpt4 book ai didi

jackson - 如何正确使用 Jackson @JSONView 从默认序列化中排除特定属性?

转载 作者:行者123 更新时间:2023-12-02 08:58:58 27 4
gpt4 key购买 nike

给定一个像这样的 JSON 映射类:

public class Person {
@JsonProperty
String getName() { ... }

@JsonProperty @JsonView(SpecialView.class)
String getId() { ... }
}

在使用“正常”序列化(即未指定 View )时,我只需要包含 name 属性,并在使用 SpecialView 序列化时包含这两个属性。但当我这么做的时候

objectMapper.writeValueAsString(object)

(即不指定任何 View ),包含id属性。

如果我这样做

objectMapper..writerWithView(Object.class).writeValueAsString(object)

然后它的行为就如预期的那样。问题是,我无法控制所有进行序列化的代码,因此我无法强制所有代码指定 View 。

当我单步查看 Jackson 源代码 (v 2.5.4) 时,我发现 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields() 不使用 _filteredProps 如果没有“事件 View ”:

    if (_filteredProps != null && provider.getActiveView() != null) {
props = _filteredProps;
} else {
props = _props;
}

奇怪的是,当未指定 View 时,序列化不会尊重 @JsonView 。我错过了什么吗?

有办法实现我想要的吗?

最佳答案

我也遇到了同样的问题。除非指定了 View ,否则 Jackson 似乎完全忽略 @JsonView 注释。为了获得您想要的行为,请为您的映射器提供一个默认的 Object.class View 。

mapper.setConfig(mapper.getSerializationConfig().withView(Object.class));

请注意,您还可以使用 @JsonView 注释排除字段

mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);

这是 Jackson 2.6.3

关于jackson - 如何正确使用 Jackson @JSONView 从默认序列化中排除特定属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com