转载: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转换接收前台传的参数的更多相关文章

  1. SpringMVC中使用bean来接收form表单提交的参数时的注意点

    这是前辈们对于SpringMVC接收表单数据记录下来的总结经验: SpringMVC接收页面表单参数 springmvc请求参数获取的几种方法 下面是我自己在使用时发现的,前辈们没有记录的细节和注意点 ...

  2. 分享知识-快乐自己:SpringMvc中的单多文件上传及文件下载

    摘要:SpringMvc中的单多文件上传及文件下载:(以下是核心代码(拿过去直接能用)不谢) <!--设置文件上传需要的jar--> <dependency> <grou ...

  3. 再springMVC中自定义文件上传处理解决与原spring中MultipartResolve冲突问题

    相信很多朋友再用springmvc时都遇见了一个问题,那就是自带的获取上传的东西太慢,而且不知道如何修改,其实不然,spring框架既然给我们开放了这个接口,就一定遵从了可扩展性的原则,经过查看org ...

  4. SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)

    JSR 303是针对bean数据校验提出的一个规范.使用注解方式实现数据校验. 每个注解的用法这里就不多介绍,请移步JSR 303 - Bean Validation 介绍及最佳实践 笔者上面提到的J ...

  5. 分享知识-快乐自己:SpringMvc整合遇到-前台传JSON参数,后台实体类对象接收

    前台数据转JSON对象: /** * * @param $myFrom:from表单 * @returns {{}} */ function from($myFrom) { var ebookEntr ...

  6. SpringMVC中Json数据格式转换

    1    @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为 ...

  7. SpringMVC中使用 MultipartFile 进行文件上传下载及删除

    一:引入必要的包 <!--文件上传--> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fil ...

  8. SpringMVC中使用CommonsMultipartResolver进行文件上传

    概述: CommonsMultipartResolver是基于Apache的Commons FileUpload来实现文件上传功能的.所以在项目中需要相应的jar文件. FileUpload版本要求1 ...

  9. springMVC中HTTP PUT请求该如何传输请求参数呢?

    对于表单提交,tomcat默认只解析POST的表单,对于PUT和DELETE的不处理,所以Spring拿不到.解决方案:1.修改tomcat的server.xml:   <Connector p ...

随机推荐

  1. [2019杭电多校第四场][hdu6614]AND Minimum Spanning Tree(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6614 题目大意是有一张n个点的完全图,n个点点权为1-n,边权为两点点权按位与(&).求最小生 ...

  2. CSRF verification failed. Request aborted.错误解决办法

    在Django项目的页面,提交form表单POST请求时,会出现报错:CSRF verification failed. Request aborted. 需要在form表单中加:{% csrf_to ...

  3. (三:NIO系列) Java NIO Channel

    出处: Java NIO Channel 1.1. Java NIO Channel的特点 和老的OIO相比,通道和NIO流(非阻塞IO)主要有以下几点区别: (1)OIO流一般来说是单向的(只能读或 ...

  4. Windows Server 搭建企业无线认证(NPS搭建)

    现代企业无线网络是必备,移动办公更是需求日益剧增.而带来的无线网络安全隐患随之而来,也是面临着巨大的挑战.所以对无线网络做接入认证是现在企业很迫切的需求. 上一遍已经说明了Radius认证方案:htt ...

  5. Linux mint启用内核转储

    1.查看当前是否启动了内核转储: star@sky:~$ ulimit -c unlimited 2.如果上面显示为0,即没有开启,那么,直接执行 ulimit -c unlimited 就好了. 3 ...

  6. 该项目不知道如何运行配置文件 IIS Express。

    项目右键属性-->调试 -->启动改为项目即可

  7. Elasticsearch学习,请先看这一篇!

    原文:Elasticsearch学习,请先看这一篇! 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  8. [环境搭建]-Web Api搭建到IIS服务器后PUT请求返回HTTP Error 405.0 - Method Not Allowed 解决方法 转摘:http://blog.csdn.net/qiujuer/article/details/23827531

    尝试使用微软的Web Api,他的确是一个很有意思的东西. 让我体会到了许多的方便,但是我发现部署到IIS服务器上去了后PUT和Delete请求将返回405. 原因是IIS的默认处理程序默认情况下只允 ...

  9. 用Node.js原生代码实现静态服务器

    ---恢复内容开始--- 后端中服务器类型有两种 1. web服务器[ 静态服务器 ] - 举例: wamp里面www目录 - 目的是为了展示页面内容 - 前端: nginx 2. 应用级服务器[ a ...

  10. [Luogu2600]合并神犇(dp,贪心)

    [Luogu2600]合并神犇 题目背景 loidc来到了NOI的赛场上,他在那里看到了好多神犇. 题目描述 神犇们现在正排成一排在刷题.每个神犇都有一个能力值p[i].loidc认为坐在附近的金牌爷 ...