java - lombok 和 jackson 不能与 openjdk 12 一起使用

标签 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 - 不

  • 将 Jackson 更新到最新版本 - 不

最佳答案

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

也搞了个把戏。

关于java - lombok 和 jackson 不能与 openjdk 12 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56364760/

相关文章:

Java运行JarInputStream

java - J单元。并行运行。但是所有的测试方法都处理单例实例。怎么解决?

json - jackson throw 失误

java - 多级@JsonTypeInfo和@JsonSubTypes

java - 如何让 QueryDSL 和 Lombok 协同工作

java - DialogFragment 上的 ArrayIndexOutOfBoundsException 崩溃

java - Jackson 序列化枚举和非传统 setter / getter

java - Lombok + Java 13 模块 + NetBeans 11 + Maven

java - 如何使用 maven-compiler-plugin 配置 Lombok?

java - Struts2注解@RequestParameter