表單:web
<h1>接受基本類型參數到Controller</h1> <form action="/param/test" method="post"> 用戶編號:<input type="text" name="id"/> 用戶名:<input type="text" name="name"/> <input type="submit" value="提交"/> </form>
controller:spring
/** * 接受基本類型參數 */ @RequestMapping("/test") public String test(Integer id,String name){ System.out.println(id); System.out.println(name); return "index"; }
個人表單是post提交的,開始是發生了亂碼問題,那麼如何解決post亂碼問題呢?數組
須要在web.xml文件中配置一個字符過濾器mvc
<!-- springMvc處理post提交中文亂碼 --> <filter> <filter-name>characterEncoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!-- 指明定編碼規則 --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
實體類:user和order是一對多的關係app
public class User { private String id; private String name; private Order order; ........ }
public class Order { private Integer no; private String name; ....... )
表單:post
<h1>接受對象類型參數到Controller</h1> <form action="/param/test1" method="post"> 用戶編號:<input type="text" name="id"/> 用戶名:<input type="text" name="name"/> 訂單編號:<input type="text" name="order.no"/> 訂單名稱:<input type="text" name="order.name"/> <input type="submit" value="提交"/> </form>
controller:測試
/** * 接受對象類型參數 經過user中的關係屬性,得到order */ @RequestMapping("/test1") public String test1(User user){ System.out.println(user.getid()); System.out.println(user.getOrder().getNo()); return "index"; }
若是是沒有關係的實體類,須要把實體類封裝在一個DTO中:編碼
BeanVO:url
/** *user和order數據傳輸類 */ public class BeanVO { private User user; private Order order; ...... }
controller:spa
/** * 接受多個對象類型參數 * 若是多個pojo之間沒有關係,也能夠採用這個方法 */ @RequestMapping("/test2") public String test1(BeanVO beanVO){ System.out.println(beanVO.getUser()); System.out.println(beanVO.getOrder()); return "index"; }
springMvc支持接收數組類型
表單:
<h1>接受數組類型參數到Controller</h1> <form action="/param/test3" method="post"> str[0]:<input type="text" name="str"/> str[1]:<input type="text" name="str"/> str[2]:<input type="text" name="str"/> <input type="submit" value="提交"/> </form>
controller:
/** * 支持接收接受數組類型 * @requestMapping 中 * 屬性二:method=RequestMethod.POST * 注意: * 一旦方法聲明的@requestMapping註解中加入method屬性,該方法只能被method屬性中聲明的提交方式訪問 * 默認支持全部提交方式 */ @RequestMapping(value="/test3",method=RequestMethod.POST) public String test2(String[] str){ for (String string : str) { System.out.println(string); } return "index"; }
springMvc不支持直接接受集合類型,須要定義一個DTO數據傳輸類:
public class CollectionVO { private List<String> list; private List<User> users; private Map<String,User> maps; ...... }
接下來分別測試
表單:
<h1>接受集合類型泛型是基本類型參數到Controller</h1> <form action="/param/test4" method="post"> list[0]:<input type="text" name="list"/> list[1]:<input type="text" name="list"/> list[2]:<input type="text" name="list"/> <input type="submit" value="提交"/> </form>
controller:
/** * 接受集合類型參數 List<String> * 注意:springmvc 不支持集合類型參數接受 * 解決辦法: * 封裝接收 */ @RequestMapping("/test4") public String test3(CollectionVO collectionVO){ for (String string : collectionVO.getList()) { System.out.println(string); } return "index"; }
form表單:
<h1>接受集合泛型User類型參數到Controller</h1> <form action="/param/test5" method="post"> users[0].id:<input type="text" name="users[0].id"/> users[1].id:<input type="text" name="users[1].id"/> users[2].id:<input type="text" name="users[2].id"/> <input type="submit" value="提交"/> </form>
controller: 接受到的view數據,會被封裝成3個User
/** * 接受集合類型參數 List<User> * 注意:springmvc 不支持集合類型參數接受 * 解決辦法: * 封裝接收 */ @RequestMapping("/test5") public String test4(CollectionVO collectionVO){ for (User user : collectionVO.getUsers()) { System.out.println(user); } return "index"; }
form表單:
<h1>接受Map集合泛型String,User類型參數到Controller</h1> <form action="/param/test6" method="post"> maps:<input type="text" name="maps['123'].id"/> maps:<input type="text" name="maps['456'].id"/> maps:<input type="text" name="maps['789'].id"/> <input type="submit" value="提交"/> </form>
controller:
/** * map集合參數接受 Map<String,User> maps */ @RequestMapping("/test6") public String test5(CollectionVO collectionVO){ for (Map.Entry<String, User> map : collectionVO.getMaps().entrySet()) { System.out.println(map.getKey()+" ------>"+map.getValue()); } return "index"; }