首页 > 解决方案 > lombok & jackson 不能与 openjdk12 一起工作

问题描述

可在此处重现:

我曾经有 java 8.x 一切正常。都打开jdk和Oracle。

升级 JDK & 和 Oracle JDK 后,我从jackson.

    Error:(10, 1) java: constructor ClientResponseData in class my.response.ClientResponseData cannot be applied to given types;
  required: no arguments
  found: java.lang.String,java.lang.String
  reason: actual and formal argument lists differ in length

我的 ClientResponseData 定义如下:

@JacksonXmlRootElement(localName = "ClientResponseData")
@Builder
@Getter
public class ClientResponseData {

    @JacksonXmlProperty(localName = "responseCode")
    private String responseCode;

    @JacksonXmlProperty(localName = "number")
    private String number;

}

在 java 更新之前对我有用的依赖项:

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.9.8</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.18</version>
        <scope>provided</scope>
    </dependency>

在 pom.xml 中,我仍然使用:<java.version>1.8</java.version>

在 java uprade 之后,我必须至少将 Lombok 更新到最新版本:1.18.8

然后我开始有问题。

  Error:(10, 1) java: constructor ClientResponseData in class my.response.ClientResponseData cannot be applied to given types;
  required: no arguments
  found: java.lang.String,java.lang.String
  reason: actual and formal argument lists differ in length

它失败了:

 return new com.fasterxml.jackson.dataformat.xml.XmlMapper().readValue(xmlString, cls);

任何线索如何使它工作?

我试过了:

标签: javajacksonlombokjava-12

解决方案


我发现 @AllArgsConstructorpublic ClientResponseData() {} 的组合是一个技巧,它开始工作。

(我不需要使用 java 8,但对于 java11、12,这是我可以使它工作的唯一方法)

@JacksonXmlRootElement(localName = "ClientResponseData")
@Builder
@Getter
@AllArgsConstructor
@ToString
public class ClientResponseData {

    public ClientResponseData() {}

    @JacksonXmlProperty(localName = "responseCode")
    private String responseCode;

    @JacksonXmlProperty(localName = "number")
    private String number;

}

如果有更好的解决方案,请告诉我!

还:

@AllArgsConstructor + @NoArgsConstructor

也有诡计。


推荐阅读