springboot get 请求下划线参数映射驼峰属性
创始人
2024-04-30 21:07:37

springboot get 请求下划线参数映射驼峰属性

背景

前端发送的参数为下划线参数,比如 user_id,为什么要不直接传驼峰参数呢,可能有些编程语言的代码规范是 下划线

java类的属性要符合代码规范,使用驼峰属性 userId

body 形式

post 请求,客户端使用 body 的形式发送参数,这种情况下划线与驼峰的映射比较好处理,springboot 默认使用的是 jackson 组件,只需在下划线的属性上加上相应的注解即可进行映射

controller 写法

@PostMapping("create")
public String create(@RequestBody UserDTO userDTO) {...
}

实体类写法

public class UserDTO {@JsonProperty("user_id")private Integer userId;...
}

对应实体类属性加上注解

参数形式

get 请求,客户端使用 ?参数拼接的形式发送参数,这时使用jackson 组件的注解是不起作用的

可以采取下面的方法进行参数绑定:

因为驼峰与下划线是有规律的,可以相互转换的,我们可以编写过滤器,根据下划线参数给对应的驼峰参数赋值,这样在绑定对象时,对象的驼峰参数就可以绑定上值了。

controller 写法

@GetMapping("list")
public List list(UserDTO userDTO) {...
}

这种没加 @RequestBody 的形式,使用 @JsonProperty 注解是不起作用的

采用过滤器的方式解决参数映射的问题

写一个过滤器

public class ParameterNameConverterFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {ParameterNameRequestWrapper requestWrapper = new ParameterNameRequestWrapper(request);filterChain.doFilter(requestWrapper, response);}
}

过滤器用传递一个自定义的request,我们会在自定义的request中写驼峰与下划线参数绑定的逻辑

自定义的request

public class ParameterNameRequestWrapper extends HttpServletRequestWrapper {public ParameterNameRequestWrapper(HttpServletRequest request) {super(request);}@Overridepublic String[] getParameterValues(String name) {// 转为下划线参数String originalName = StrUtil.toUnderlineCase(name);;return super.getParameterValues(originalName);}
}

重写getParameterValues方法,当获取对象属性(驼峰参数)的值时,转为 获取 对应的 下划线参数的值

spring加载该过滤器

@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean getParameterNameConverterFilterRegistrationBean() {FilterRegistrationBean registrationBean = new FilterRegistrationBean();registrationBean.setFilter(new ParameterNameConverterFilter());registrationBean.addUrlPatterns("/xxxx/*");registrationBean.setName("parameterNameConverterFilter");registrationBean.setOrder(0);return registrationBean;}
}

参考

  1. Spring MVC 实现 GET 请求下划线风格参数映射至驼峰风格的类:https://www.jianshu.com/p/c43e1f02b445

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...