You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用@RequestBody映射JSON至含@Builder注解的Java类

解决@RequestBody映射带@Builder注解Java类的问题

问题原因

添加@Builder注解后,Lombok会生成带参数的构造方法,同时不再自动生成无参构造方法。而Spring的@RequestBody默认需要目标类具备无参构造方法来实例化对象,或者有能匹配JSON字段的构造方法,这直接导致了映射失败。

解决方案

方案1:补充无参构造方法

在Card类上同时添加@NoArgsConstructor和@AllArgsConstructor注解,让Lombok生成无参构造和全参构造,Spring就能正常实例化对象:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Card {
    private String id;
    // 其他字段...
}

注意:字段名Id建议改成小写开头的id,符合Java命名规范,避免JSON映射时出现大小写匹配问题。

方案2:使用Lombok的@Jacksonized注解(推荐)

如果你的Lombok版本是1.18.14及以上,直接添加@Jacksonized注解即可,它会自动配置Jackson适配Lombok的Builder,无需额外构造方法:

@Data
@Builder
@Jacksonized
public class Card {
    private String id;
    // 其他字段...
}

方案3:手动配置Jackson支持Builder

若无法升级Lombok版本,可通过配置Jackson的BuilderModule来实现支持:

  1. 创建Jackson配置类:
@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new ParameterNamesModule())
                    .registerModule(new Jdk8Module())
                    .registerModule(new JavaTimeModule());
        // 启用Builder支持
        objectMapper.enable(MapperFeature.USE_BUILDER);
        return objectMapper;
    }
}
  1. 确保Card类的Builder是Lombok生成的标准Builder,同时字段与JSON字段匹配。

内容的提问来源于stack exchange,提问作者Kai-Eiji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 03:40:22