Spring Boot/Jackson:如何将蛇形命名模型序列化为驼峰命名?
解决方案:统一将蛇形命名模型序列化为驼峰格式返回
这问题我做GraphQL集成的时候也碰到过,刚好有几个不用逐个字段加注解的方案,完美适配你的场景:
方案1:Spring Boot全局Jackson配置(最推荐)
Spring Boot默认用Jackson处理JSON序列化/反序列化,你只需要在配置文件里加一行全局配置,就能让所有蛇形命名的字段自动转为驼峰格式输出,完全不用修改生成的模型类:
用application.yml配置:
spring: jackson: property-naming-strategy: LOWER_CAMEL_CASE
用application.properties配置:
spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE
这个配置会让Jackson自动把所有下划线分隔的字段名(比如my_string)转换成小驼峰格式(myString)输出给客户端。如果你的项目里还有其他需要保持蛇形输出的类,可以单独给那些类加@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)来覆盖全局配置。
方案2:给生成的模型类统一加类级注解
如果全局配置会影响其他业务类,你可以给每个graphql-java-codegen生成的模型类加上@JsonNaming注解,指定驼峰命名策略:
import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; @JsonNaming(PropertyNamingStrategies.LowerCamelCaseStrategy.class) public class GeneratedModel { private String my_string; // 其他字段和getter/setter }
虽然你说无法修改模型生成配置,但如果能通过代码生成的模板(比如graphql-java-codegen支持自定义模板)或者批量脚本给所有生成的类加上这个注解,也是可行的。这个方案只会影响加了注解的模型类,不会干扰其他类的序列化规则。
注意事项
- 确保你的REST控制器用的是
@RestController(默认用Jackson序列化),如果用了其他序列化框架(比如Gson),配置方式会不一样。 - 如果生成的模型类里已经有个别字段加了
@JsonProperty,那这个注解会覆盖全局或类级的命名策略,但你说不会给每个字段加,所以不用考虑这个冲突。
内容的提问来源于stack exchange,提问作者grizzasd
相关产品推荐
相关产品推荐

