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

Spring Boot 3中Java Record作为RequestBody无法正确绑定驼峰字段问题

Spring Boot 3 中 Java Record 作为 RequestBody 的绑定异常问题解析

核心原因

Spring Boot 3 升级后配套的 Jackson 版本(2.15+)对 Java Record 的字段命名处理逻辑和 Spring Boot 2 有明显差异:

  • Spring Boot 2 里,Jackson 对 Record 字段兼容驼峰命名的自动匹配,即便没有注解也能正确绑定请求中的驼峰字段。
  • 到了 Spring Boot 3,Jackson 默认会对 Record 的字段应用基于原始字段名的命名策略转换。如果你的项目全局配置了蛇形命名策略(spring.jackson.property-naming-strategy=SNAKE_CASE,这也是 Spring Boot 3 常见的默认配置之一),Record 里的驼峰字段exampleData会被解析为example_data,导致请求中的exampleData无法匹配,最终绑定为null;而本身就是蛇形命名的example_data字段则能直接匹配,所以正常绑定。

解决方案

你可以通过以下几种方式解决这个问题:

1. 显式指定字段映射(最直接)

继续用@JsonProperty注解明确指定字段对应的 JSON 键名,示例:

public record ExampleRequestDto(@JsonProperty("exampleData") String exampleData) {}

2. 调整全局 Jackson 命名策略

如果希望全局保持驼峰命名的自动匹配,修改application.properties或application.yml中的配置:

# application.properties
spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE

YAML 格式:

# application.yml
spring:
  jackson:
    property-naming-strategy: LOWER_CAMEL_CASE

这样 Jackson 会直接使用 Record 的驼峰字段名作为 JSON 键名,无需额外注解就能绑定请求中的exampleData。

3. 自定义 Jackson 模块(进阶方案)

如果需要更灵活的定制,可以创建自定义 Jackson 模块调整 Record 的字段命名规则,但这种方式复杂度较高,一般优先推荐前两种方案。

补充说明

Java Record 的字段访问器是直接以字段名命名的(比如exampleData()而非普通 Bean 的getExampleData()),和传统 Java Bean 的 getter 规则不同,Jackson 处理 Record 时会优先用字段原始名称来应用命名策略,这就是 Spring Boot 2 和 3 出现差异的核心原因。

内容的提问来源于stack exchange,提问作者user3414980

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:41:05