Issue
I'm at a complete loss here. I have a class with overloaded setters for a property, and for the life of me cannot get Jackson to pick a correct setter. Stripping out the things not needed from the class, here's the base of what I've got:
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;
}
}
I have tried every combination I can think of of @JsonIgnore
and @JsonProperty
. I've tried just adding @JsonProperty
to the @Setter
annotation, I've tried only adding @JsonIgnore
to the two custom setters, I've tried only @JsonProperty
on the field itself, but no matter what I try, I get the following error:
Conflicting setter definitions for property "wrappedValues": ...#setWrappedValues(1 params) vs ...#setWrappedValues(1 params)
Does anyone have any ideas what's going on here? Using Jackson 2.12.4, so I think just @JsonProperty
should be all that's needed, but as I mentioned above, that still results in the same error.
This is on JDK 11 if that makes a difference, I'm still new to 11, so am not sure how much that affects this.
Solution
You need to mark setter you want to use as 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. Your @Setter
aren't generating anything since there are methods with name setWrappedValues
Answered By - geobreze
Answer Checked By - Gilberto Lyons (JavaFixing Admin)