参数绑定相关注解
- @RequestParam,绑定单个请求数据,可以是URL中的数据,表单提交的数据或上传的文件;
- @PathVariable,绑定URL模板变量值;
- @CookieValue,绑定Cookie数据;
- @RequestHeader,绑定请求头数据;
- @ModelAttribute,绑定数据到Model;
- @SessionAttributes,绑定数据到Session;
- @RequestBody,用来处理Content-Type不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
- @RequestPart,绑定“multipart/data”数据,并可以根据数据类型进项对象转换;
基本数据类型-int
如果参数的属性是required的, 可以用int. 如果不是required的, 需要使用包装类型Integer. 因为值为null会导致异常.
@RequestMapping("saysth.do") public void test(int count) { }
|
<form action="saysth.do" method="post"> <input name="count" value="10" type="text"/> </form> `
|
包装类型-integer
@RequestMapping("saysth.do") public void test(Integer count) { }
|
- HTML
<form action="saysth.do" method="post"> <input name="count" value="10" type="text"/> </form> `
|
自定义对象类型
public class User { private String firstName; private String lastName; ... }
|
@RequestMapping("saysth.do") public void test(User user) { }
|
- HTML
<form action="saysth.do" method="post"> <input name="firstName" value="张" type="text"/> <input name="lastName" value="三" type="text"/> </form>
|
自定义复合对象类型
public class ContactInfo { private String tel; private String address; public String getTel() { return tel; } ... } public class User { private String firstName; private String lastName; private ContactInfo contactInfo; ... getter & setter }
|
@RequestMapping("saysth.do") public void test(User user) { System.out.println(user.getFirstName()); System.out.println(user.getLastName()); System.out.println(user.getContactInfo().getTel()); System.out.println(user.getContactInfo().getAddress()); }
|
<form action="saysth.do" method="post"> <input name="firstName" value="张" /><br> <input name="lastName" value="三" /><br> <input name="contactInfo.tel" value="13809908909" /><br> <input name="contactInfo.address" value="北京海淀" /><br> <input type="submit" value="Save" /> </form>
|
List
public class User { private String firstName; private String lastName; ... } public class UserListForm { private List<User> users; ... }
|
@RequestMapping("saysth.do") public void test(UserListForm userForm) { for (User user : userForm.getUsers()) { System.out.println(user.getFirstName() + " - " + user.getLastName()); } }
|
<form action="saysth.do" method="post"> <table> <thead> <tr> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tfoot> <tr> <td colspan="2"><input type="submit" value="Save" /></td> </tr> </tfoot> <tbody> <tr> <td><input name="users[0].firstName" value="aaa" /></td> <td><input name="users[0].lastName" value="bbb" /></td> </tr> <tr> <td><input name="users[1].firstName" value="ccc" /></td> <td><input name="users[1].lastName" value="ddd" /></td> </tr> <tr> <td><input name="users[2].firstName" value="eee" /></td> <td><input name="users[2].lastName" value="fff" /></td> </tr> </tbody> </table> </form>
|
Set
public class User { private String firstName; private String lastName; ... } public class UserSetForm { private Set<User> users = new HashSet<User>(); public UserSetForm() { users.add(new User()); users.add(new User()); users.add(new User()); } ... }
|
@RequestMapping("saysth.do") public void test(UserSetForm userForm) { for (User user : userForm.getUsers()) { System.out.println(user.getFirstName() + " - " + user.getLastName()); } }
|
<form action="saysth.do" method="post"> <table> <thead> <tr> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tfoot> <tr> <td colspan="2"><input type="submit" value="Save" /></td> </tr> </tfoot> <tbody> <tr> <td><input name="users[0].firstName" value="aaa" /></td> <td><input name="users[0].lastName" value="bbb" /></td> </tr> <tr> <td><input name="users[1].firstName" value="ccc" /></td> <td><input name="users[1].lastName" value="ddd" /></td> </tr> <tr> <td><input name="users[2].firstName" value="eee" /></td> <td><input name="users[2].lastName" value="fff" /></td> </tr> </tbody> </table> </form>
|
Map
public class User { private String firstName; private String lastName; ... } public class UserMapForm { private Map<String, User> users; ... }
|
@RequestMapping("saysth.do") public void test(UserMapForm userForm) { for (Map.Entry<String, User> entry : userForm.getUsers().entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue().getFirstName() + " - " + entry.getValue().getLastName()); } }
|
<form action="saysth.do" method="post"> <table> <thead> <tr> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tfoot> <tr> <td colspan="2"><input type="submit" value="Save" /></td> </tr> </tfoot> <tbody> <tr> <td><input name="users['x'].firstName" value="aaa" /></td> <td><input name="users['x'].lastName" value="bbb" /></td> </tr> <tr> <td><input name="users['y'].firstName" value="ccc" /></td> <td><input name="users['y'].lastName" value="ddd" /></td> </tr> <tr> <td><input name="users['z'].firstName" value="eee" /></td> <td><input name="users['z'].lastName" value="fff" /></td> </tr> </tbody> </table> </form>
|
Json
前端的content type: contentType:’application/json;charset=utf-8’
controller方法的参数使用@RequestBody
public class User { private String firstName; private String lastName; ... }
|
@RequestMapping("json.do") public void test(@RequestBody User user) { return user; }
|
var params = { "firstName": "张", "lastName": "三", }; $.ajax({ type: 'post', url: 'json.do', contentType:'application/json;charset=utf-8', dataType: 'json', data: JSON.stringify(params), success: function(data){ console.log(data); } });
|
XML
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency>
|
public class User { private String firstName; private String lastName; ... }
|
@RequestMapping("xml.do") public void xml(@RequestBody User user) { return user; }
|
POST /xml HTTP/1.1 Host: localhost:8080 Content-Type: application/xml Cache-Control: no-cache Postman-Token: 03933f48-c29b-bfb8-bb10-29ed5c2c237c <user> <firstName>张</firstName> <lastName>三</lastName> </user>
|