(1) 普通方式-请求参数名和Controller方法的参数一致

 @Controller
@RequestMapping("/param")
public class TestParamController {
private static final Logger logger = LoggerFactory.getLogger(TestParamController.class);
/**
* 请求参数名和Controller方法的参数一致
* produces 设置返回参数的编码格式可以设置返回数据的类型以及编码,可以是json或者xml
* {
* @RequestMapping(value="/xxx",produces = {"application/json;charset=UTF-8"})
* 或
* @RequestMapping(value="/xxx",produces = {"application/xml;charset=UTF-8"})
* 或
* @RequestMapping(value="/xxx",produces = "{text/html;charset=utf-8}")
* }
* @param name 用户名
* @param pwd 密码
* @return
*
*/
@RequestMapping(value = "/add", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUser(String name, String pwd){
logger.debug("name:" + name + ",pwd:" + pwd);
return "name:" + name + ",pwd:" + pwd;
} }

如下图所示:

通过访问:http://localhost:8080/sty/param/add.action?name=张三&pwd=123456

(2) 对象方式-请求参数名和Controller方法中的对象的参数一致

@Controller
@RequestMapping("/param")
public class TestParamController {
private static final Logger logger = LoggerFactory.getLogger(TestParamController.class);
/**
* 请求参数名和Controller方法的参数一致
* produces 设置返回参数的编码格式可以设置返回数据的类型以及编码,可以是json或者xml
* }
* @param user 用户信息
* @return
*
*/
@RequestMapping(value = "/addByObject", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUserByObject(User user){
logger.debug("name:" + user.getName() + ",pwd:" + user.getPwd());
return "name:" + user.getName() + ",pwd:" + user.getPwd();
}
}

如下图所示:

通过访问:http://localhost:8080/sty/param/addByObject.action?name=张三&pwd=123456

(3) 自定义方法参数名-当请求参数名与方法参数名不一致时

  注意可以在参数中增加@RequestParam注解。如果在方法中的参数增加了该注解,说明请求的url必须带该带有该参数,否则不能执行该方法。如果在方法中的参数没有增加该注解,说明请求的url无需带有该参数,也能继续执行该方法。

  @RequestParam(defaultValue="0")可设置默认值(仅当传入参数为空时)。

  @RequestParam(value="id")可接受传入参数为id的值,覆盖该注解注释的字段。

  @RequestParam(name="name",defaultValue = "李四") String u_name   如果传入字段”name”为空,默认u_name的值为”李四”。若传入”name”不为空,默认u_name值为传入值。

以下只该出方法:

/**
* 自定义方法参数名-当请求参数名与方法参数名不一致时
* @param u_name 用户名
* @param u_pwd 密码
* @return
*/
@RequestMapping(value = "/addByDifName", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUserByDifName(@RequestParam("name") String u_name, @RequestParam("pwd")String u_pwd){
logger.debug("name:" + u_name + ",pwd:" + u_pwd);
return "name:" + u_name + ",pwd:" + u_pwd;
}

如下图所示:

通过访问:http://localhost:8080/sty/param/addUserByDifName.action?name=张三&pwd=123456

(4) HttpServletRequest方式

  以下只给出该方法:

/**

 * 通过HttpServletRequest接收

 * @param request

 * @return

 */

@RequestMapping(value = "/addByHttpServletRequest", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBody

public String addUserByHttpServletRequest(HttpServletRequest request){

    String name = request.getParameter("name");

    String pwd = request.getParameter("pwd");

    logger.debug("name:" + name + ",pwd:" + pwd);

    return "name:" + name + ",pwd:" + pwd;

}

如下图所示:

通过访问:http://localhost:8080/sty/param/addByHttpServletRequest.action?name=张三&pwd=123456

(5) @PathVariable获取路径中的参数接收

参考:https://www.iteye.com/blog/zhlj11-1885005

   注:url含有中文名称时,因为编码问题,无法进行映射,需要修改tomcat下的conf文件夹下的server.xml中的URIEncoding=”UTF-8”,对URL编码设置就可以解决中文问题。

对于经常遇到路径在有符号”.”问题,因为springmvc默认是把点后面的信息作为文件后缀,需要修改默认值:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors" ref="localeChangeInterceptor"/>
<property name="useDefaultSuffixPattern" value="false" />
</bean>

  另外,这时候如果只设置这个,请求可以传递到对于的controller,但传过去的数据会有问题,只会传最后一个点前面的数据,除非你在最后加上“/”,比如/news/测试.点/  这样就会把“测试.点”当作整体,不然只会得到“测试”。这时候我们可以这样设置@RequestMapping("/news/{title:.*}")

以下只给出该方法(本次不进行中文及特殊符号测试):

/**

 * 通过@PathVariable获取路径中的参数 

 * @param name 用户名

 * @param pwd 密码

 * @return

 */

@RequestMapping(value = "/add/{name}/{pwd}", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBody

public String addUserByPathVariable(@PathVariable String name, @PathVariable String pwd){

    logger.debug("name:" + name + ",pwd:" + pwd);

    return "name:" + name + ",pwd:" + pwd;

}

如下图所示:

通过访问:http://localhost:8080/sty/param/add/zhangsan/123456.action

(6) @RequestBody-JSON方式接收

  以上方式(1)/(2)/)(3)/(4)/(5)都是非JSON方式,也就是说如果使用JSON方式提交,会报错(在第二种对象方式中,将get请求方式修改为POST,并将上送数据修改为JSON串方式):

此时未引入jackson-databind.jar依赖。并在springmvc.xml文件未进行开启json格式的支持,也就是说未加入以下代码:

<!-- 同时开启json格式的支持-->
<mvc:annotation-driven></mvc:annotation-driven>

  提交请求打印未有报错,但是返回的数据为null,如图所示:

  

若开启json格式的支持,测试也如上图所示,也并能正常返回。

原因:因为为在字段名称之前未使用@RequestBody注解。

eg1(测试普通对象)

代码如下所示,

/**

 * RequestBody-JSON 对象方式

 * @param user

 * @return

 */

@RequestMapping(value = "/addByObjectJSON", produces = {"application/json;charset=UTF-8"})

@ResponseBody

public String addUserByObjectJSON(@RequestBody User user){

    logger.debug("name:" + user.getName() + ",pwd:" + user.getPwd());

    return "name:" + user.getName() + ",pwd:" + user.getPwd();

}
测试结果如图所示(访问 http://localhost:8080/sty/param/addByObjectJSON.action ):

eg2(测试List对象)

代码如下所示,

/**
* RequestBody-JSON List对象方式
* @param users
* @return
*/
@RequestMapping(value = "/addByListJSON", produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUsersByListJSON(@RequestBody List<User> users){
StringBuilder sb = new StringBuilder("{");
if(null != users){
for(User user : users){
sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}");
}
}
sb.append("}");
logger.debug(sb.toString());
return sb.toString();
}

   测试结果

  测试结果如图所示(访问 http://localhost:8080/sty/param/addByListJSON.action  ):

  

eg3(测试Map对象)

代码如下图所示:

/**

 * RequestBody-JSON Map对象方式

 * @param users

 * @return

 */

@RequestMapping(value = "/addByMapJSON", produces = {"application/json;charset=UTF-8"})

@ResponseBody

public String addUsersByMapJSON(@RequestBody Map<String, User> users){

    StringBuilder sb = new StringBuilder("{");

    if(null != users){

        Iterator it = users.keySet().iterator();

        while(it.hasNext()){

            User user = users.get(it.next());

            sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}");

        }

    }

    sb.append("}");

    logger.debug(sb.toString());

    return sb.toString();

}

测试结果

测试结果如图所示(访问 http://localhost:8080/sty/param/addByMapJSON.action ):

另外附部分源码:

 User.java

package com.mjs.study.action.dto;

/**
* @Description
* @ClassName User
* @Author Administrator
* @Data 2019/10/13 2:43
* @Version 1.0
*/
public class User {
private String name;
private String pwd;
private String sex; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPwd() {
return pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
}
}
 TestParamController.java 
package com.mjs.study.action;

import com.github.pagehelper.PageInfo;
import com.mjs.study.action.dto.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest;
import java.util.Iterator;
import java.util.List;
import java.util.Map; /**
* @Description 测试springmvc传入参数
* @ClassName TestParamController
* @Author Administrator
* @Data 2019/10/13 1:33
* @Version 1.0
*/
@Controller
@RequestMapping("/param")
public class TestParamController {
private static final Logger logger = LoggerFactory.getLogger(TestParamController.class);
/**
* 请求参数名和Controller方法的参数一致
* produces 设置返回参数的编码格式 可以设置返回数据的类型以及编码,可以是json或者xml
* {
* @RequestMapping(value="/xxx",produces = {"application/json;charset=UTF-8"})
* 或
* @RequestMapping(value="/xxx",produces = {"application/xml;charset=UTF-8"})
* 或
* @RequestMapping(value="/xxx",produces = "{text/html;charset=utf-8}")
* }
* @param name 用户名
* @param pwd 密码
* @return
*
*/
@RequestMapping(value = "/add", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUser(String name, String pwd){
logger.debug("name:" + name + ",pwd:" + pwd);
return "name:" + name + ",pwd:" + pwd;
} /**
* 自定义方法参数名-当请求参数名与方法参数名不一致时
* @param u_name 用户名
* @param u_pwd 密码
* @return
*/
@RequestMapping(value = "/addByDifName", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUserByDifName(@RequestParam(name="name",defaultValue = "李四") String u_name, @RequestParam("pwd")String u_pwd){
logger.debug("name:" + u_name + ",pwd:" + u_pwd);
return "name:" + u_name + ",pwd:" + u_pwd;
} /**
* 请求参数名和Controller方法的参数一致
* produces 设置返回参数的编码格式 可以设置返回数据的类型以及编码,可以是json或者xml
* @param user 用户信息
* @return
*
*/
@RequestMapping(value = "/addByObject", produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUserByObject(User user){
logger.debug("name:" + user.getName() + ",pwd:" + user.getPwd());
return "name:" + user.getName() + ",pwd:" + user.getPwd();
} /**
* RequestBody-JSON 对象方式
* @param user
* @return
*/
@RequestMapping(value = "/addByObjectJSON", produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUserByObjectJSON(@RequestBody User user){
logger.debug("name:" + user.getName() + ",pwd:" + user.getPwd());
return "name:" + user.getName() + ",pwd:" + user.getPwd();
} /**
* RequestBody-JSON List对象方式
* @param users
* @return
*/
@RequestMapping(value = "/addByListJSON", produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUsersByListJSON(@RequestBody List<User> users){
StringBuilder sb = new StringBuilder("{");
if(null != users){
for(User user : users){
sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}");
}
}
sb.append("}");
logger.debug(sb.toString());
return sb.toString();
}
/**
* RequestBody-JSON Map对象方式
* @param users
* @return
*/
@RequestMapping(value = "/addByMapJSON", produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUsersByMapJSON(@RequestBody Map<String, User> users){
StringBuilder sb = new StringBuilder("{");
if(null != users){
Iterator it = users.keySet().iterator();
while(it.hasNext()){
User user = users.get(it.next());
sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}");
}
}
sb.append("}");
logger.debug(sb.toString());
return sb.toString();
}
/**
* 通过HttpServletRequest接收
* @param request
* @return
*/
@RequestMapping(value = "/addByHttpServletRequest", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUserByHttpServletRequest(HttpServletRequest request){
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
logger.debug("name:" + name + ",pwd:" + pwd);
return "name:" + name + ",pwd:" + pwd;
} /**
* 通过@PathVariable获取路径中的参数
* @param name 用户名
* @param pwd 密码
* @return
*/
@RequestMapping(value = "/add/{name}/{pwd}", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addUserByPathVariable(@PathVariable String name, @PathVariable String pwd){
logger.debug("name:" + name + ",pwd:" + pwd);
return "name:" + name + ",pwd:" + pwd;
}
}

  该部分和个人github部分内容同步。

springmvc Controller接收前端参数的几种方式总结的更多相关文章

  1. SpringBoot 接收前端参数的几种方式

    昨天和前端小伙伴在联调是碰到了参数接收不到的错误,我在postman上测试接口是正常的,但是与前端对接时就接受不到参数,请求方式都是get,但是问题就在于json  和 form-data 的区别!这 ...

  2. SpringBoot接收前端参数的三种方法

    都是以前的笔记了,有时间就整理出来了,SpringBoot接收前端参数的三种方法,首先第一种代码: @RestController public class ControllerTest { //访问 ...

  3. springMVC接收请求参数的几种方式

    1.  用注解@RequestParam绑定请求参数 用注解@RequestParam绑定请求参数a到变量a,当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,例如: ...

  4. PHP命令行脚本接收传入参数的三种方式

    通常PHP都做http方式请求了,可以使用GET or POST方式接收参数,有些时候需要在shell命令下把PHP当作脚本执行,比如定时任务.这就涉及到在shell命令下如何给php传参的问题,通常 ...

  5. SpringMVC Controller接收参数总结

    本文中Controller的开发环境如下表格所示,Maven对应POM配置如下代码段所示: 系统/工具 版本号OS Windows 7 Home BasicJava 1.7.0_79Eclipse M ...

  6. SpringBoot Controller接收参数的几种方式盘点

    本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:SpringBoot Controller接收参数的几种方式盘点: SpringBoot Controller接收参数的几种常用方式盘点 ...

  7. SpringMVC获取参数的几种方式

    前言: 年末了,忙了一年了却发现系统的整理的东西很少,一些基础的东西都未做整理,这里就将它随便整理一下,增加一些印象,当然在网上看到一些好的资料也会整理下来以备后用.今天整理一下springMVC获取 ...

  8. ssh框架总结之action接收参数的三种方式

    页面将参数传递给action的三种方式 一是通过属性传值: 将页面和action的的属性值保持一致,在action上写上该属性的set和get方法,这样在页面提交参数的时候,action就会调用set ...

  9. springboot 获取控制器参数的几种方式

    这里介绍springboot 获取控制器参数有四种方式 1.无注解下获取参数 2.使用@RequestParam获取参数 3.传递数组 4.通过URL传递参数 无注解下获取参数无注解下获取参数,需要控 ...

随机推荐

  1. hdu2082 找单词 母函数模板

    找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. hdu2586 How far away ?(lca模版题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给出一棵树还有两个点然后求这两个点的最短距离. 题解:val[a]+val[b]-2*va ...

  3. Constructing Roads HDU 1102

    There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...

  4. 利用GPU训练网络时遇到的一些问题

    1. OSError: [Error 12] Cannot allocate memory 解决办法: 出现这个错误时我是绝望的...因为我看了别人的解决办法,要加内存条才能解决...但是我不甘心,想 ...

  5. IDEA中创建maven web项目

    本文将带你一路从IDEA中maven的配置到创建maven web项目,掌握IDEA中maven的使用. 一.IDEA中配置maven 开发中一般我们使用自己下载的maven,不使用IDEA工具自带的 ...

  6. Linux下编译提示arm-none-linux-gnueabi-gcc: command not found

    自己的Linux系统中已经正确安装了交叉编译器arm-2009q3,路径设置正常. 但是在使用arm-none-linux-gnueabi-gcc编译时提示  arm-none-linux-gnuea ...

  7. CF785D Anton and School – 2

  8. maven引入jar包冲突问题

    1.原因 使用maven过程中,经常会遇到jar包重复加载或者jar包冲突的问题,但是有些jar包是由于maven加载了其他jar包自动引入的,并非自己主动添加的,导致和自己添加的jar包版本冲突 举 ...

  9. JDK8时间工具类

    JDK8添加了java.time包,提供了很多方便.用得比较多的几个类:Instant 在时间线上模拟单个瞬时点Duration 以秒和纳秒为单位模拟一个数量或时间量.可以使用其他基于持续时间的单位访 ...

  10. linux文件系统分区、格式化、挂载、卷标挂载、永久挂载

    思想不放松你的行为就不会放松,你的行为放松了,说明你的思想放松了.