杰克逊冲突二传手,即使@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

的方法