小工具知识网

当前位置: 首页 > 行业知识 > SpringBoot系列之Web如何支持下划线驼峰互转的传参与返回

行业知识

SpringBoot系列之Web如何支持下划线驼峰互转的传参与返回

2026-11-01 16:24:14 来源:互联网转载

SpringBoot系列之Web如何支持下划线驼峰互转的传参与返回

接下来介绍一个非常现实的应用场景,有些时候后端接口对外定义的传参/返回都是下划线命名风格,但是Java本身是推荐驼峰命名方式的,那么必然就存在一个传参下换线,转换成驼峰的场景;以及在返回时,将驼峰命名的转换成下划线

那么如何支持上面这种应用场景呢?

本文介绍几种常见的手段

I. 项目搭建

1. 项目依赖

本项目借助SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发

开一个web服务用于测试

                org.springframework.boot        spring-boot-starter-web    

配置文件application.yml

server:  port: 8080

2. 需求拆分

接下来为了更方便的理解我们要做的事情,对上面的应用场景进行一些拆分,方便理解

2.1 请求参数解析

对于请求参数,外部传递是下划线命名格式的方式,需要与项目中驼峰命名的对象进行映射,所以这里的问题点就是无法走默认的绑定规则,需要我们进行兼容处理

比如传参是 user_name = 一灰灰,但是我们接收的参数是 userName

2.2 返回结果处理

返回结果的处理,这里单指返回json对象的场景,一个普通的POJO对象,正常序列化为json字符串时,key实际上与对象的成员名是一致的,而现在则希望将key统一成下划线风格的方式

如,返回一个简单的实体对象​​​​​​​

public class ViewDo {  private Integer userId;  private string userName;}

对应期待返回的json串为​​​​​​​

{  "user_name" : "张三",  "user_id" : 110}

II. 支持方式

为了简化后续的流程,我们这里的传参都确定两个userName + userId,对应项目中的实体类如​​​​​​​

@Data@NoArgsConstructor@AllArgsConstructorpublic static class ViewDo {    private Integer userId;    private String userName;}

1. 请求参数解析

1.1 @RequestParam注解方式

最简单也是最容易想到的方式自然是直接使用RequestParam注解,将所有的请求参数都通过它来重命名​​​​​​​

@GetMapping(path = "getV3")public ViewDo getV3(@RequestParam("user_id") Integer userId, @RequestParam("user_name") String userName) {    String str = "userId: " + userId + " userName: " + userName;    System.out.println(str);    return new ViewDo(userId, userName);}

使用上面直接来写参数映射关系的方式属于比较常见的方法了,但是存在一个问题

•通用性差(每个接口的每个参数都要这么整,如果工资是按照代码来付费的话,那还是可以接收的;否则这个写法,就真的有点难受了)•若接口参数定义的是Map、Java bean实体(POJO),这个映射关联就不太好处理了

除了上面这个问题之外,有个不是问题的问题(为什么这么说,且看下面的说法)

•如果我的接口传参,希望同时接收驼峰和下划线命名的传参(现实中还真有这种神经病似的场景,别问我怎么知道的),上面这个是不行的

1.2 Json传参指定命名策略

上面的case,适用于常见的get请求,post表单传参,然后在接口处一一定义参数;对于post json传参时,我们可以考虑通过定义json序列化的命名策略,来支持下划线与驼峰的互转

比如SpringMVC默认使用的jackson来实现json序列化,那么我们可以直接通过指定jackson的PropertyNamingStrategy来完成

配置文件中 application.yml,添加下面这行​​​​​​​

spring:  jackson:    # 使用jackson进行json序列化时,可以将下划线的传参设置给驼峰的非简单对象成员上;并返回下划线格式的json串    # 特别注意。使用这种方式的时候,要求不能有自定义的WebMvcConfigurationSupport,因为会覆盖默认的处理方式    # 解决办法就是 拿到ObjectMapper的bean对象,手动塞入进去    property-naming-strategy: SNAKE_CASE

对应的接口定义如下​​​​​​​​​​​​​​

/** * post json串 *  curl 'http://127.0.0.1:8080/postV2' -X POST -H 'content-type:application/json' -d '{"user_id": 123, "user_name": "一灰灰"}' * @param viewDo * @return */@PostMapping(path = "postV2")public ViewDo postV2(@RequestBody ViewDo viewDo) {    System.out.println(viewDo);    return viewDo;}

实际请求之后,看一下效果

注意

•使用上面这种配置的方式,需要特比注意的,如果在项目中自己定义了WebMvcConfigurationSupport,那么上面的配置将不会生效(至于具体的原因,后面有机会单独说明)

当我们实际的项目中,无法直接使用上面这种配置时,可以考虑使用下面的方式​​​​​​​

@SpringBootApplicationpublic class Application  extends WebMvcConfigurationSupport {    /**     * 下面这个设置,可以实现json参数解析/返回时,传入的下划线转驼峰;输出的驼峰转下划线     * @param converters     */    @Override    protected void extendMessageConverters(List

上一篇:服务器怎么和电脑传文件?

下一篇:'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件。'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件。...