杰克逊冲突二传手,即使@JsonIgnore和@JsonProperty
Jackson conflicting setters, even with @JsonIgnore and @JsonProperty
我在这里完全不知所措。我有一个 class 和一个 属性 超载的 setter,我这辈子都无法让 Jackson 选择正确的 setter。从 class 中删除不需要的东西,这是我得到的基础:
class TestDTO {
@Setter(onMethod_={@JsonProperty})
@JsonProperty
protected CustomWrapper wrappedValues = new CustomWrapper();
@JsonIgnore
@XmlTransient
public RecordAudit setWrappedValues(List<WrappedObject> wrappedValues) {
this.customWrapper = new CustomWrapper(wrappedValues);
return this;
}
@JsonIgnore
@XmlTransient
public RecordAudit setWrappedValues(CustomWrapper customWrapper) {
this.customWrapper = customWrapper;
return this;
}
}
@JsonIgnore
和@JsonProperty
我能想到的所有组合我都试过了。我试过只将 @JsonProperty
添加到 @Setter
注释,我只尝试将 @JsonIgnore
添加到两个自定义 setter,我只尝试了 @JsonProperty
在字段本身上,但无论我尝试什么,我都会收到以下错误:
Conflicting setter definitions for property "wrappedValues": ...#setWrappedValues(1 params) vs ...#setWrappedValues(1 params)
有人知道这里发生了什么吗?使用 Jackson 2.12.4,所以我认为只需要 @JsonProperty
就可以了,但正如我上面提到的,这仍然会导致相同的错误。
这是在 JDK 11 上进行的,如果有影响的话,我还是 11 的新手,所以我不确定这有多大影响。
您需要将要使用的 setter 标记为 com.fasterxml.jackson.annotation.JsonSetter
。
class TestDTO {
protected CustomWrapper wrappedValues = new CustomWrapper();
public RecordAudit setWrappedValues(List<WrappedObject> wrappedValues) {
this.customWrapper = new CustomWrapper(wrappedValues);
return this;
}
@JsonSetter
public RecordAudit setWrappedValues(CustomWrapper customWrapper) {
this.customWrapper = customWrapper;
return this;
}
}
P.S。你的 @Setter
没有生成任何东西,因为有名称为 setWrappedValues
的方法
我在这里完全不知所措。我有一个 class 和一个 属性 超载的 setter,我这辈子都无法让 Jackson 选择正确的 setter。从 class 中删除不需要的东西,这是我得到的基础:
class TestDTO {
@Setter(onMethod_={@JsonProperty})
@JsonProperty
protected CustomWrapper wrappedValues = new CustomWrapper();
@JsonIgnore
@XmlTransient
public RecordAudit setWrappedValues(List<WrappedObject> wrappedValues) {
this.customWrapper = new CustomWrapper(wrappedValues);
return this;
}
@JsonIgnore
@XmlTransient
public RecordAudit setWrappedValues(CustomWrapper customWrapper) {
this.customWrapper = customWrapper;
return this;
}
}
@JsonIgnore
和@JsonProperty
我能想到的所有组合我都试过了。我试过只将 @JsonProperty
添加到 @Setter
注释,我只尝试将 @JsonIgnore
添加到两个自定义 setter,我只尝试了 @JsonProperty
在字段本身上,但无论我尝试什么,我都会收到以下错误:
Conflicting setter definitions for property "wrappedValues": ...#setWrappedValues(1 params) vs ...#setWrappedValues(1 params)
有人知道这里发生了什么吗?使用 Jackson 2.12.4,所以我认为只需要 @JsonProperty
就可以了,但正如我上面提到的,这仍然会导致相同的错误。
这是在 JDK 11 上进行的,如果有影响的话,我还是 11 的新手,所以我不确定这有多大影响。
您需要将要使用的 setter 标记为 com.fasterxml.jackson.annotation.JsonSetter
。
class TestDTO {
protected CustomWrapper wrappedValues = new CustomWrapper();
public RecordAudit setWrappedValues(List<WrappedObject> wrappedValues) {
this.customWrapper = new CustomWrapper(wrappedValues);
return this;
}
@JsonSetter
public RecordAudit setWrappedValues(CustomWrapper customWrapper) {
this.customWrapper = customWrapper;
return this;
}
}
P.S。你的 @Setter
没有生成任何东西,因为有名称为 setWrappedValues