body 形式前端发送的参数为下划线参数,比如 user_id,为什么要不直接传驼峰参数呢,可能有些编程语言的代码规范是 下划线
成都创新互联公司主打移动网站、成都网站建设、成都网站制作、网站改版、网络推广、网站维护、国际域名空间、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。java类的属性要符合代码规范,使用驼峰属性 userId
controller 写法post 请求,客户端使用 body 的形式发送参数,这种情况下划线与驼峰的映射比较好处理,springboot 默认使用的是 jackson 组件,只需在下划线的属性上加上相应的注解即可进行映射
@PostMapping("create")
public String create(@RequestBody UserDTO userDTO) {...
}
实体类写法public class UserDTO {@JsonProperty("user_id")
private Integer userId;
...
}
对应实体类属性加上注解
参数形式controller 写法get 请求,客户端使用 ?参数拼接的形式发送参数,这时使用jackson 组件的注解是不起作用的
可以采取下面的方法进行参数绑定:
因为驼峰与下划线是有规律的,可以相互转换的,我们可以编写过滤器,根据下划线参数给对应的驼峰参数赋值,这样在绑定对象时,对象的驼峰参数就可以绑定上值了。
@GetMapping("list")
public Listlist(UserDTO userDTO) {...
}
这种没加 @RequestBody 的形式,使用 @JsonProperty 注解是不起作用的
采用过滤器的方式解决参数映射的问题
写一个过滤器public class ParameterNameConverterFilter extends OncePerRequestFilter {@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {ParameterNameRequestWrapper requestWrapper = new ParameterNameRequestWrapper(request);
filterChain.doFilter(requestWrapper, response);
}
}
过滤器用传递一个自定义的request,我们会在自定义的request中写驼峰与下划线参数绑定的逻辑
自定义的requestpublic class ParameterNameRequestWrapper extends HttpServletRequestWrapper {public ParameterNameRequestWrapper(HttpServletRequest request) {super(request);
}
@Override
public String[] getParameterValues(String name) {// 转为下划线参数
String originalName = StrUtil.toUnderlineCase(name);;
return super.getParameterValues(originalName);
}
}
重写getParameterValues方法,当获取对象属性(驼峰参数)的值时,转为 获取 对应的 下划线参数的值
spring加载该过滤器@Configuration
public class FilterConfig {@Bean
public FilterRegistrationBean getParameterNameConverterFilterRegistrationBean() {FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new ParameterNameConverterFilter());
registrationBean.addUrlPatterns("/xxxx/*");
registrationBean.setName("parameterNameConverterFilter");
registrationBean.setOrder(0);
return registrationBean;
}
}
参考你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧