SpringMVC Controller接收参数总结
2017-11-17 19:04
330 查看
SpringMVC Controller接收参数总结
何平行者 关注2016.11.10 19:28* 字数 738 阅读 8587评论 3喜欢 40赞赏 2本文中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类,具体类内容如下代码所示: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) @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(Strin bfef g 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的各种参数绑定方式
相关文章推荐
- SpringMVC Controller接收参数总结
- SpringMVC请求参数接收总结
- SpringMVC Controller接收参数总结(将请求的参数绑定到controller的方法上)
- 重大发现 springmvc Controller 高级接收参数用法
- SpringMVC Controller接收前台ajax的GET或POST请求返回各种参数
- SpringMvc接收参数方法总结(必看篇)
- SpringMVC Controller接收前台ajax的GET或POST请求返回各种参数
- SpringMVC Controller接收前台ajax的GET或POST请求返回各种参数
- springMVC接收参数 xml/json
- 提高生产力:SpringMVC中,使用扩展数据类型TypedMap接收Web请求参数
- springmvc项目jsp页面传递参数至controller中文乱码解决方案
- SpringMVC 接收对象参数
- springMVC 多个entity(User Famliy) 接收参数处理(属性名称不一样)
- Controller中获取输入参数注解使用总结
- SpringMvc的使用注意事项(接收jsp页面传递过来的参数)
- springMVC利用WebArgumentResolver为controller注入当前用户对象参数
- springMVC教程初级(四)Controller篇(结果、参数 )
- 详解SpringMVC――接收请求参数和页面传参
- SpringMVC-接收请求参数和页面传参