我已经和 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 等的每种组合,但没有任何效果对我有用。
您可以尝试以下解决方案之一:
@JsonIgnoreProperties(value = {"usefulProperty2", "usefulProperty3"}, ignoreUnknown = true)
public class BaseClass {
private long usefulProperty1;
private BigDecimal usefulProperty2;
private BigDecimal usefulProperty3;
private int garbageProperty;
// other properties
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class BaseClass {
@JsonIgnore
private long usefulProperty1;
@JsonIgnore
private BigDecimal usefulProperty2;
@JsonProperty
private BigDecimal usefulProperty3;
@JsonProperty
private int garbageProperty;
// other properties
}
尝试一下并告诉我