SpringMVC Controller接收参数总结
来源:互联网 发布:js if 不等于比较大小 编辑:程序博客网 时间:2024/06/06 07:41
本文中Controller的开发环境如下表格所示,Maven对应POM配置如下代码段所示:
<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)@ResponseBodypublic String requestList(@RequestParam("listParam[]") List<String> param) { return "Request successful. Post param : List<String> - " + param.toString();}
对应Postman
的请求如下:
对应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)@ResponseBodypublic String requestList(@RequestParam Map<String, Object> param) { return "Request successful. Post param : Map - " + param;}
对应Postman
的请求如下:
对应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类,具体类内容如下代码所示:
public 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)@ResponseBodypublic 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
的请求如下:
这里再说一下,如果自定义类中包含集合的话,要如何处理参数的问题,首先定义包含集合的类,具体代码如下所示:
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=" + code + ", address=" + address + "]"; }}
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)@ResponseBodypublic String requestLink(@ModelAttribute Link link) { return "Get request is successful. Post param : User Class - " + link.toString();}
对应Postman
的请求如下:
对应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)@ResponseBodypublic String requestPath(@PathVariable String key, @PathVariable String value) { return "Get request is successful. Path param : key - " + key + "; value - " + value;}
对应Postman
的请求如下:
最后,说一下用HttpServletRequest接收请求参数的方法,Controller代码如下所示,Controller接收到的参数值均为String类型:
@RequestMapping(value="/request", method=RequestMethod.POST)@ResponseBodypublic 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的各种参数绑定方式
- SpringMVC Controller接收参数总结
- SpringMVC Controller接收参数总结
- SpringMVC Controller接收参数总结
- SpringMVC Controller 接收页面传递的中文参数出现乱码
- SpringMVC Controller 接收页面传递的中文参数出现乱码
- springmvc controller层接收List类型的参数
- springmvc controller层接收List类型的参数
- Controller通过@RequestBody接收参数
- SpringMVC 接收对象参数
- SpringMVC 接收对象参数
- springMVC接收对象参数
- springmvc接收数组参数
- springmvc接收数组参数
- Springmvc接收数组参数
- springmvc接收参数
- springMVC 接收参数415
- SpringMVC接收参数
- springmvc接收参数
- spoj 839 OPTM - Optimal Marks (最小割)
- 网络机顶盒怎么用
- Webkit之html解析(2)——解码和HTMLTokenizer的处理
- JS获取当前使用的浏览器名字以及版本号
- 浅谈MDN HTML
- SpringMVC Controller接收参数总结
- Webkit之html解析(3)——HTMLToken的处理
- 【BZOJ 3083】遥远的国度 树剖
- Insta360:从软到硬,一年做出360°全景相机,中间填了多少坑?
- zoj2060
- 微信高性能日志组件Xlog的接入和使用
- try 错误处理
- ROS入门_1.16 录制与回放数据
- spring注解详解