【问题标题】:JsonIgnore annotation is not working with LombokJsonIgnore 注释不适用于 Lombok
【发布时间】:2020-04-09 05:07:41
【问题描述】:

我正面临龙目岛和杰克逊的非常奇怪的问题。下面是我正在处理的一段代码。

@Getter
@Setter
@NoArgsConstructor
@XmlRootElement
public class Order{

    //@JsonIgnore
    @Getter(onMethod = @__(@JsonIgnore))
    private boolean userPresent;
}

所以我想要的是,这个 dto 应该序列化为 Json 那么这个 userPresent 属性不应该作为响应属性出现。我虽然@JsonIgnore 会为我工作。但根据https://stackoverflow.com/a/57119494/2111677 文章,我认为这是 Lombok 的一些问题。 然后我改变了使用 OnMethod 的方法。

现在,在 eclipse 上编译非常好,但是当我尝试使用 mvn 编译时,它给了我以下错误。

当它不能与 maven 一起工作时,有人可以帮我解决。

【问题讨论】:

  • 您使用哪个Java 版本?您能否显示来自Maven 的错误消息。你能用-X参数编译吗?

标签: maven jackson lombok


【解决方案1】:

@__ 样式适用于 javac7。对于 javac8+,你必须使用这个变体:

@Getter(onMethod_=@JsonIgnore)

但是,在字段、getter 或 setter 上使用 @JsonIgnore 注释就足够了。如果它存在于其中至少一个上,则在(反)序列化期间完全忽略整个“虚拟属性”。所以如果这是你想要的,你就不需要onMethod_

如果您希望它仅在序列化期间被忽略,而不是在反序列化时,您必须在 setter 上添加 @JsonProperty

@JsonIgnore
@Setter(onMethod_=@JsonProperty)
private boolean userPresent;

【讨论】:

    【解决方案2】:

    它不起作用,解决方法是在类级别使用@JsonIgnoreProperties:

    @JsonIgnoreProperties({"email"})
    

    【讨论】:

      【解决方案3】:

      这对我有用。

      @RequiredArgsConstructor
      @Setter
      @NoArgsConstructor
      @Entity
      public class ProductColor {
      
          @Id
          @GeneratedValue
          @NonNull
          @Getter
          private Long id;
      
          @NonNull
          @Getter
          private String color;
      
          @ManyToMany(mappedBy="colors")
          @Getter(onMethod_ = @JsonIgnore)
          private Set<Product> products;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-13
        • 2022-01-15
        • 2021-02-27
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        • 2018-10-13
        相关资源
        最近更新 更多