springmvc 参数接受

jQuery 的$.ajax(url,[settings]) 
1.默认的ContentType的值为:application/x-www-form-urlencoded; charset=UTF-8 
此格式为表单提交格式,数据为key1=value1&key2=value2的格式 
2.虽然ajax的data属性值格式为:{key1:value1,key2:value2},但最后会转为key1=value1&key2=value2的格式提交到后台 
3.如果ajax要和springmvc交互,key1=value1&key2=value2的格式,后台springmvc只需要定义对象或者参数就行了,会自动映射。 

4.如果springmvc的参数有@RequestBody注解(接收json**字符串**格式数据),ajax必须将date属性值转为json字符串,不能为json对象(js对象,会自动转为key=value形式)。并且,修改contentType的值为:application/json; charset=UTF-8,这样加了@RequestBody注解的属性才能自定映射到值


表单:

复制代码
<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:

复制代码
/**
     * 接受基本类型参数
     */
    @RequestMapping("/test")
    public String test(Integer id,String name){
        System.out.println(id);
        System.out.println(name);
        return "index";
    }
复制代码

我的表单是post提交的,开始是发生了乱码问题,那么如何解决post乱码问题呢?

  需要在web.xml文件中配置一个字符过滤器

复制代码
<!-- 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是一对多的关系

复制代码
public class User {
        private String id;  
        private String name;
        private Order order;
               
                ........        
}    
复制代码
复制代码
public class Order {
    
    private Integer no;
    private String name;
        .......
)
复制代码
 1)接收有关系的对象

表单:

复制代码
<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:

复制代码
/**
*user和order数据传输类
*/
public class BeanVO {

    private User user;
    private Order order;
        ......
}
复制代码

 controller:

复制代码
/**
     * 接受多个对象类型参数
     *  如果多个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";
    }
复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值