如何在请求体(Request Body)中接收小驼峰式(lowerCamelCase)参数?
如何让Spring接收小驼峰格式的请求体参数?
嗨,我来帮你捋清楚这个问题!首先得明确一点:Jackson(Spring默认的JSON序列化/反序列化工具)默认就支持小驼峰(lowerCamelCase)的参数映射——因为你的Student实体类字段本身就是小驼峰命名(比如firstName),正常情况下不用额外配置就能匹配请求体里的同名小驼峰字段。
你之前用了@JsonNaming(PropertyNamingStrategy.LowerCaseStrategy.class),这个注解会强制把所有字段映射成纯小写格式(比如请求体里的firstname),所以才会导致小驼峰参数无法被正确接收。下面给你几种实用的解决思路:
方法1:移除LowerCaseStrategy,恢复默认行为
如果这个@JsonNaming注解是加在Student类上的,直接删掉它就行。恢复默认后,Jackson会自动按照实体类的小驼峰字段名匹配请求体参数:
class Student{ String firstName; // 自动匹配请求体里的"firstName" String lastName; // 自动匹配请求体里的"lastName" int rollNumber; // 自动匹配请求体里的"rollNumber" }
这时你传请求体{"firstName":"John","lastName":"Doe","rollNumber":123},就能正常映射到Student对象里了。
方法2:显式指定小驼峰命名策略(保留@JsonNaming注解)
如果你还是想通过@JsonNaming统一配置命名规则,可以指定小驼峰对应的策略,注意Jackson版本的差异:
- 对于Jackson 2.12及以上版本(推荐),用新的
PropertyNamingStrategies枚举:
import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; @JsonNaming(PropertyNamingStrategies.LOWER_CAMEL_CASE) class Student{ String firstName; String lastName; int rollNumber; }
- 如果是旧版本Jackson,用旧的
PropertyNamingStrategy:
import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; @JsonNaming(PropertyNamingStrategy.LowerCamelCaseStrategy.class) class Student{ String firstName; String lastName; int rollNumber; }
方法3:单个字段自定义映射(灵活处理特殊场景)
如果只是部分字段需要小驼峰,其他字段要保留原有规则,可以用@JsonProperty注解单独指定每个字段对应的请求体参数名:
class Student{ @JsonProperty("firstName") // 显式匹配请求体里的"firstName" String firstName; @JsonProperty("lastName") String lastName; int rollNumber; }
这种方式适合混合多种命名格式的复杂场景。
内容的提问来源于stack exchange,提问作者Gaurav Jha
相关产品推荐
相关产品推荐

