龙目岛和杰克逊不能与openjdk12一起使用

时间:2019-05-29 16:16:28

标签: java jackson lombok java-12

可复制的here

我以前有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爆发之后,我不得不至少将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);

有什么线索使它起作用吗?

我尝试过:

  • 添加@NoArgsConstructor-不可以

  • 将杰克逊更新到最新-否

1 个答案:

答案 0 :(得分:0)

我发现@AllArgsConstructor 公共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

也是个把戏。