springMvc中自定义bean转换接收前台传的参数
转载:https://blog.csdn.net/u013476435/article/details/81538099
因前端整体传参时,参数名都不是驼峰写法,类似 music_name,music_type,
因此在后台需要加上@RequestParam("music_name")String musicName 来接收,
但是后台中是用bean来接收的
@RequestMapping(value = "/test",method = {RequestMethod.POST})
@ResponseBody
public void test( MusicInfo musicinfo) {
System.out.println("进来了" + musicinfo.getMusicName());
}
因此需要自定义去将参数转换成可以识别的 如果前端传music_name,
我们处理成musicName并添加到MusicInfo实体中,完成参数的解析.
自定义参数转换到实体bean并实现HandlerMethodArgumentResolver
import org.springframework.beans.BeanUtils;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import java.lang.reflect.Field;
import java.util.Iterator;
/**
* @author qi.liu
* @create 2018-08-09 下午 2:21
* @desc 描述:
**/
public class TestDiyRequestParamResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(DiyRequestParam.class);
}
@Override
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
//生成结果的对象
Object resultObject = BeanUtils.instantiate(parameter.getParameterType());
//未经过处理的字段名 music_name
String sourceTemp;
//经过处理的字段名 musicName
String executeTemp;
//传参的值 例如 music_name=asdmsakdlasjd 的value
String[] values;
//得到bean中的方法
Field[] frr = parameter.getParameterType().getDeclaredFields();
for (Iterator<String> itr = webRequest.getParameterNames(); itr
.hasNext(); ) {
sourceTemp = itr.next();
executeTemp = sourceTemp;
// music_name -> musicName
while (executeTemp.indexOf("_") > 0) {
Integer indexOf = executeTemp.indexOf("_");
executeTemp = executeTemp.replaceFirst("_", "");
executeTemp = executeTemp.substring(0, indexOf) + executeTemp.substring(indexOf, indexOf + 1).toUpperCase() + executeTemp.substring(indexOf + 1, executeTemp.length());
}
//去赋值
for (int i = 0; i < frr.length; i++) {
frr[i].setAccessible(true);
if (executeTemp.equals(frr[i].getName())) {
values = webRequest.getParameterValues(sourceTemp);
frr[i].set(resultObject, values[0]);
}
}
}
return resultObject;
}
}
自定义注解 DiyRequestParam
/**
* @author qi.liu
* @create 2018-08-09 下午 2:22
* @desc 描述:
**/
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DiyRequestParam {
String value() default "";
boolean required() default true;
String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}
在spring-mvc.xml中加入自定义的 TestDiyRequestParamResolver
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="customArgumentResolvers">
<list>
<bean class="net.okdi.o2o.beautiful.controller.TestDiyRequestParamResolver">
</bean>
</list>
</property>
</bean>
在参数前加上
@RequestMapping(value = "/test",method = {RequestMethod.POST})
@ResponseBody
public void test(@DiyRequestParam MusicInfo musicinfo) {
System.out.println("进来了" + musicinfo.getMusicName());
}
看下效果
后台接收到
————————————————
版权声明:本文为CSDN博主「变味的麦芽糖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013476435/article/details/81538099
springMvc中自定义bean转换接收前台传的参数的更多相关文章
- SpringMVC中使用bean来接收form表单提交的参数时的注意点
这是前辈们对于SpringMVC接收表单数据记录下来的总结经验: SpringMVC接收页面表单参数 springmvc请求参数获取的几种方法 下面是我自己在使用时发现的,前辈们没有记录的细节和注意点 ...
- 分享知识-快乐自己:SpringMvc中的单多文件上传及文件下载
摘要:SpringMvc中的单多文件上传及文件下载:(以下是核心代码(拿过去直接能用)不谢) <!--设置文件上传需要的jar--> <dependency> <grou ...
- 再springMVC中自定义文件上传处理解决与原spring中MultipartResolve冲突问题
相信很多朋友再用springmvc时都遇见了一个问题,那就是自带的获取上传的东西太慢,而且不知道如何修改,其实不然,spring框架既然给我们开放了这个接口,就一定遵从了可扩展性的原则,经过查看org ...
- SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)
JSR 303是针对bean数据校验提出的一个规范.使用注解方式实现数据校验. 每个注解的用法这里就不多介绍,请移步JSR 303 - Bean Validation 介绍及最佳实践 笔者上面提到的J ...
- 分享知识-快乐自己:SpringMvc整合遇到-前台传JSON参数,后台实体类对象接收
前台数据转JSON对象: /** * * @param $myFrom:from表单 * @returns {{}} */ function from($myFrom) { var ebookEntr ...
- SpringMVC中Json数据格式转换
1 @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为 ...
- SpringMVC中使用 MultipartFile 进行文件上传下载及删除
一:引入必要的包 <!--文件上传--> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fil ...
- SpringMVC中使用CommonsMultipartResolver进行文件上传
概述: CommonsMultipartResolver是基于Apache的Commons FileUpload来实现文件上传功能的.所以在项目中需要相应的jar文件. FileUpload版本要求1 ...
- springMVC中HTTP PUT请求该如何传输请求参数呢?
对于表单提交,tomcat默认只解析POST的表单,对于PUT和DELETE的不处理,所以Spring拿不到.解决方案:1.修改tomcat的server.xml: <Connector p ...
随机推荐
- java学习day3运算符
一.算数运算符 1.对于除号“/”,它的整数除和小数除是有区别的:当整数除以整数的时候,会把结果的小数部分舍弃,只保留整数部分,例如: int x=3510; x=x/1000; 输出结果为x=3; ...
- html5实现拖拽上传
<html><head> <meta http-equiv="Content-Type" content="text/html; chars ...
- springboot多数据源&动态数据源(主从)
多数据源 使用Spring Boot时,默认情况下,配置DataSource非常容易.Spring Boot会自动为我们配置好一个DataSource. 如果在application.yml中指定了s ...
- JS中类或对象的定义说明
本篇文章主要是对JS中类或对象的定义进行说明介绍.我们知道,JS是面向对象的.谈到面向对象,就不可避免的要涉及类的概念.一般像c#,java这些强类型语言都有固定的定义类的语法.而JS的不同之处在于它 ...
- Mysql日期和字符的相互转换
今天从网上查到了一些关于MySQL数据库的日期转换函数的转换的用法,在这里记录一下: mysql日期和字符相互转换 date_format(date,'%Y-%m-%d') ------------- ...
- rocketmq-console控制台管理界面配置
Rocketmq可视化管理控制台配置 前提: RocketMQ有一个对其扩展的开源项目incubator-rocketmq-externals,这个项目中有一个子模块叫“rocketmq-consol ...
- 372-基于XC7VX690T的高速模拟信号、万兆光纤综合计算平台
基于XC7VX690T的高速模拟信号.万兆光纤综合计算平台 一.板卡概述 基于V7的高性能PCIe信号处理板,板卡选用Xilinx 公司Virtex7系列FPGA XC7VX690T-2FFG1761 ...
- 王垠-40行代码 -cps.ss
;; A simple CPS transformer which does proper tail-call and does not ;; duplicate contexts for if-ex ...
- [php代码审计] php://filter
筛选过滤应用: 1. 字符串过滤器: string.rot13 对字符串执行ROT13转换 string.toupper转换为大写 string.tolower 转换为小写 string.strip_ ...
- HTML表单(来自MDN的总结)
表单介绍 HTML表单是用户和web站点或应用程序之间交互的主要内容之一.它们允许用户将数据发送到web站点.大多数情况下,数据被发送到web服务器,但是web页面也可以拦截它自己并使用它. HTML ...