SpringMVC Controller接收参数总结
2017-05-03 17:54
477 查看
http://www.jianshu.com/p/ed44e89a6f79
本文中Controller的开发环境如下表格所示
Maven对应Pom主要依赖配置
SpringMVC Controller各方法参数绑定首先支持Java所有基本类型(包括:
代码示例如下所示(这里仅以
List
除了基本类型,Spring Controller各方法参数绑定还支持集合类型,这里拿常用的
对应
Postman Post请求及应答图示.png
对应
关于
Map
对应
Postman Post请求及应答图示.png
对应
Map作为参数的话,会把Ajax请求中的全部数据转换为key-value存入Map对应中,具体可参见Spring官方文档关于@RequestParam部分
自定义People类,具体类内容如下代码所示:
对应Controller方法代码如下所示,主要的不同点就是需要在自定义类前添加
对应
对应
Postman Post请求及应答图示.png
这里再说一下,如果自定义类中包含集合的话,要如何处理参数的问题,首先定义包含集合的类,具体代码如下所示:
最后是Controller部分的代码,示例如下:
Postman Post请求及应答图示.png
对应
Postman Post请求及应答图示.png
对应
通过URL路径传递参数并接收,具体Controller代码如下所示:
对应
Postman Post请求及应答图示.png
最后,说一下用HttpServletRequest接收请求参数的方法,Controller代码如下所示,Controller接收到的参数值均为String类型:
对应Ajax请求:
这里idList是集合类型,如果不是用JSON.stringify()进行转换的话,到Controller层接收到的参数值对应则为null。
本文中Controller的开发环境如下表格所示
系统/工具 | 版本号 |
---|---|
OS | Windows 7 Home Basic |
Java | 1.7.0_79 |
Eclipse | Mars.1 Release (4.5.1) |
Maven | 3.3.9 |
Postman | 4.8.1 |
Tomcat | 7.0.47 |
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.1.RELEASE</version> </dependency>
基本数据类型
SpringMVC Controller各方法参数绑定首先支持Java所有基本类型(包括:byte、
short、
int、
long、
float、
double、
char、
string、
boolean),以及基本类型对应封装高级类(包括:
StringBuilder、
StringBuffer)。
代码示例如下所示(这里仅以
int及
Integer类型做例子,其他类型实现方式与此类同):
@Controller @RequestMapping("param") public class ParamController { @RequestMapping(value="/int", method=RequestMethod.POST) @ResponseBody public String requestInt(int param) { return "Request successful. Post param : Int - " + param; } @RequestMapping(value="/integer", method=RequestMethod.POST) @ResponseBody public String requestInteger(Integer param) { return "Request successful. Post param : Integer - " + param; } //...... }
集合类型
List除了基本类型,Spring Controller各方法参数绑定还支持集合类型,这里拿常用的
List和
Map举例,如果直接拿集合类作为绑定参数,写法上与基本类型类似,不同的是需要在参数处增加注解
@RequestParam(),具体代码示例如下所示:
@RequestMapping(value="/list", method=RequestMethod.POST) @ResponseBody public String requestList(@RequestParam("listParam[]") List<String> param) { return "Request successful. Post param : List<String> - " + param.toString(); }
对应
Postman的请求如下:
Postman Post请求及应答图示.png
对应
Ajax的请求如下:
var strList = new Array(); strList.push("field1"); strList.push("field2"); function postList() { $.ajax({ type:"POST", url:"http://localhost:8080/Learn-Spring-MVC/list", data:{"listParam" : strList}, dataType:"json", success:function(result) { //...... }, error:function(result) { //...... } }); }
关于
List做为Controller参数,除了
String本人还测试
Integer以及
Double类型,其他类型未作测试。这里面
@RequestParam()必须增加"listParam[]"如果你的Web端是别的名字,换成相应名称即可,如果只用
@RequestParam注解的话,请求会接到
HTTP Status 400 - Required List parameter 'xxx' is not present的提示信息。
Map
Map类型作为参数,只需要使用
@RequestParam注解即可,这里
Map对应的
key-value基本是
String类型,
value可以为
Object,代码示例如下所示:
@RequestMapping(value="/map", method=RequestMethod.POST) @ResponseBody public String requestList(@RequestParam Map<String, Object> param) { return "Request successful. Post param : Map - " + param; }
对应
Postman的请求如下:
Postman Post请求及应答图示.png
对应
Ajax的请求如下:
function postMap() { $.ajax({ type:"POST", url:"http://localhost:8080/Learn-Spring-MVC/map", data:{field1:"field1",field2:1}, dataType:"json", success:function(result) { //...... }, error:function(result) { //...... } }); }
Map作为参数的话,会把Ajax请求中的全部数据转换为key-value存入Map对应中,具体可参见Spring官方文档关于@RequestParam部分
自定义类型
自定义People类,具体类内容如下代码所示:pu 1109e blic class People implements Serializable{ private static final long serialVersionUID = 1L; private String name; private short age; private Map<String, String> relationship; public String getName() { return name; } public void setName(String name) { this.name = name; } public short getAge() { return age; } public void setAge(short age) { this.age = age; } public Map<String, String> getRelationship() { return relationship; } public void setRelationship(Map<String, String> relationship) { this.relationship = relationship; } @Override public String toString() { return "People [name=" + name + ", age=" + age + ", relationship=" + relationship + "]"; } }
对应Controller方法代码如下所示,主要的不同点就是需要在自定义类前添加
@ModelAttribute注解:
@RequestMapping(value="/people", method=RequestMethod.POST) @ResponseBody public String requestPeople(@ModelAttribute People people) { return "Get request is successful. Post param : User Class - " + people.toString(); }
对应
Ajax的请求如下:
var people = { name:"Heacewalker", age:25, relationship:{"boss":"BigBoss"} } function postClick() { $.ajax({ type:"POST", url:"http://localhost:8080/Learn-Spring-MVC/people", data:people, dataType:"json", success:function(result) { //...... }, error:function(result) { //...... } }); }
对应
Postman的请求如下:
Postman Post请求及应答图示.png
这里再说一下,如果自定义类中包含集合的话,要如何处理参数的问题,首先定义包含集合的类,具体代码如下所示:
public class Address { private String code; private String address; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Address"; } }
[code]public class Link {
private List<Address> address;
public List<Address> getAddress() {
return address;
}
public void setAddress(List<Address> address) {
this.address = address;
}
@Override
public String toString() {
return "Link [address=" + address + "]";
}
}
最后是Controller部分的代码,示例如下:
@RequestMapping(value="/link", method=RequestMethod.POST) @ResponseBody public String requestLink(@ModelAttribute Link link) { return "Get request is successful. Post param : User Class - " + link.toString(); }
Postman Post请求及应答图示.png
对应
Postman的请求如下:
Postman Post请求及应答图示.png
对应
Ajax的请求如下:
<form onsubmit="return PostData()"> <input name="address[0].address" value="AKB"/> <input name="address[0].code" value="48"/> <input name="address[1].address" value="HKT"/> <input name="address[1].code" value="48"/> <input type="submit" value="提交"/> </form> ...... function PostData() { $.ajax({ type:"POST", url:"http://localhost:8080/Learn-Spring-MVC/link", data:'', success:function(result) { //...... }, error:function(result) { //...... } }); }
通过URL路径传递参数并接收,具体Controller代码如下所示:
@RequestMapping(value="/path/{key}/{value}", method=RequestMethod.POST) @ResponseBody public String requestPath(@PathVariable String key, @PathVariable String value) { return "Get request is successful. Path param : key - " + key + "; value - " + value; }
对应
Postman的请求如下:
Postman Post请求及应答图示.png
最后,说一下用HttpServletRequest接收请求参数的方法,Controller代码如下所示,Controller接收到的参数值均为String类型:
@RequestMapping(value="/request", method=RequestMethod.POST) @ResponseBody public String request(HttpServletRequest arg0, HttpServletResponse arg1) { return "Get request is successful. Post param : param1 - " + arg0.getParameter("param1") + "; param2 - " + arg0.getParameter("param2") + "; param3 - " + arg0.getParameter("param3"); }
对应Ajax请求:
var idList = new Array(); idList.push("1"); idList.push("2"); idList.push("3"); function postTest() { $.ajax({ type:"POST", url:"http://localhost:8080/Learn-Spring-MVC/request", data:{"param1":"test","param2":2,"param3":JSON.stringify(idList)}, dataType:"json", success:function(result) { //...... }, error:function(result) { //...... } }); }
这里idList是集合类型,如果不是用JSON.stringify()进行转换的话,到Controller层接收到的参数值对应则为null。
相关文章推荐
- SpringMVC Controller接收参数总结(将请求的参数绑定到controller的方法上)
- SpringMVC Controller 接收页面传递的中文参数出现乱码
- spring mvc controller 接收参数
- Spring-MVC接收request参数和向页面传值总结
- Springmvc controller接收请求参数类型
- SpringMVC controller接收的中文参数乱码
- SpringMVC Controller 接收页面传递的中文参数出现乱码
- SpringMVC Controller 接收页面传递的中文参数出现乱码
- 解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题
- SpringMVC Controller接收前台ajax的GET或POST请求返回各种参数(转)
- springmvc controller接收jsp页面传过来的参数和传值到jsp页面
- Spring MVC Controller 接收ajax的数组参数说明
- Spring MVC Controller 接收ajax传来的数组参数
- spring mvc controller接收请求值及controller之间跳转及传值
- spring mvc InitBinder 遇到的坑接收不了参数
- Springmvc+ajax如何通过ajax封装多个对象参数,controller接受多个对象参数
- spring mvc @ModelAttribute 接收前台参数问题
- SpringBoot开发详解(五)--Controller接收参数以及参数校验
- Spring MVC @RestController接收POST请求,用Map接收
- SpringMvc+Spring4+hibernate框架 ajax提交JSON数据Controller接收