如何使用@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来实现支持:
- 创建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; } }
- 确保
Card类的Builder是Lombok生成的标准Builder,同时字段与JSON字段匹配。
内容的提问来源于stack exchange,提问作者Kai-Eiji
相关产品推荐
相关产品推荐

