Jackson:有没有办法默认排除类中的所有内容并显式包含?

问题描述 投票:0回答:1

我已经和 Jackson 搞了一段时间了,但我一辈子都想不出如何让 Jackson 只包含我告诉它的属性。

我们有一个从基类继承的数据模型设置,我们希望默认从该基类中排除所有内容,也许有一些例外。

因此,对于我们来说,排除所有内容(除非明确包含)会更有意义。

为什么这是不可能的?对我来说,这似乎是一个非常常见的用例。 经过几个小时的谷歌搜索和反复试验后,我找不到任何类似于解决方案的东西

我想要的最终结果是这样的:

@JsonIgnore
public class BaseClass {
    @JsonInclude
    private long usefulProperty1;

    @JsonInclude
    private BigDecimal usefulProperty2;

    @JsonInclude
    private BigDecimal usefulProperty3;

    private int garbageProperty;
    //.
    //.
    //.
    private int garbageProperty200;
}

public class SubClass extends BaseClass {
    private String usefulProperty1;
    private long usefulProperty2;
}

也就是说,我只想使用注释,或者至少在基类中使用一次性实现。我不想在每个类中都有额外的样板代码来告诉杰克逊要包含/排除什么。 另外,我们并不真正关心 getter 和 setter(我们只是指定字段并让 Lombok 生成 getter 和 setter),因此如果有一个可以将注释直接应用于字段的解决方案,那就太好了。

我尝试了可见性选项,但这只是导致类根本没有被序列化/反序列化。 我觉得我已经尝试了 @JsonInclude @JsonProperty @JsonIncludeProperties (在课堂上)@JsonIgnore 等的每种组合,但没有任何效果对我有用。

java serialization jackson deserialization
1个回答
0
投票

您可以尝试以下解决方案之一:

  1. 第一个解决方案
@JsonIgnoreProperties(value = {"usefulProperty2", "usefulProperty3"}, ignoreUnknown = true)
public class BaseClass {
    private long usefulProperty1;
    private BigDecimal usefulProperty2;
    private BigDecimal usefulProperty3;
    private int garbageProperty;
    // other properties
}
  1. 第二种解决方案
@JsonIgnoreProperties(ignoreUnknown = true)
public class BaseClass {

    @JsonIgnore
    private long usefulProperty1;

    @JsonIgnore
    private BigDecimal usefulProperty2;

    @JsonProperty
    private BigDecimal usefulProperty3;

    @JsonProperty
    private int garbageProperty;

    // other properties
}

尝试一下并告诉我

© www.soinside.com 2019 - 2024. All rights reserved.