springMvc--接受請求參數

接收基本類型

表單: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;
        .......
)

 1)接收有關係的對象

表單: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";
    }        

2)接收多個對象

若是是沒有關係的實體類,須要把實體類封裝在一個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;
        ......
}

接下來分別測試

1) list集合泛型是基本類型,例如:list<String>

表單:

<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";
    }

2)list集合泛型對象類型,例如:List<User> users

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";
    }

3)Map集合: Map集合中封裝的是 Map<String,User> maps

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";
    }
相關文章
相關標籤/搜索