fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG] 实体类使用了Lombok 的 @SuperBuilder 和 @Jacksonized 注解时,反序列化会失败

Open XinShepherd opened this issue 7 months ago • 3 comments

问题描述

实体类使用了Lombok 的 @SuperBuilder 和 @Jacksonized 注解时,反序列化会失败

环境信息

请填写以下信息:

  • OS信息: [ MacOS 16G i5]
  • JDK信息: [JDK8]
  • 版本信息:[2.0.51]

重现步骤

如何操作可以重现该问题:

  1. 运行 main 方法,当没有使用 Jacksonized 注解时,代码运行成功
  2. 当打开 Jacksonized 注解时,main 方法运行失败
@SuperBuilder
@NoArgsConstructor
@Setter
@Getter
public class SuperRequest {

    protected String base;

    @SuperBuilder
    @NoArgsConstructor
//    @Jacksonized
    @Setter
    @Getter
    public static class DemoRequest extends SuperRequest {
        private String name;
    }

    public static void main(String[] args) {
        DemoRequest demoRequest = JSON.parseObject("{\"name\":\"test\",\"base\":\"test\"}", DemoRequest.class);
        Assertions.assertThat(demoRequest.getName()).isEqualTo("test");
        Assertions.assertThat(demoRequest.getBase()).isEqualTo("test");
    }
}
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
        </dependency>

期待的正确结果

最低期望:实体类使用 Jacksonized 也能序列化成功。 最高期望:实体类应当能够仅通过使用 SuperBuilder 和 Jacksonized 实现序列化,无需额外添加 NoArgsConstructor 和 Setter 注解。

相关日志输出

请复制并粘贴任何相关的日志输出。

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。

XinShepherd avatar Jul 10 '24 06:07 XinShepherd