springmvc的请求参数绑定

前言

原生的servlet接收参数需要通过request.getParameter()方法获取,然后进行类型转换。而springmvc完成了对Servlet的封装,简化了servlet的很多操作。例如springmvc在接收整形参数时,直接在Handler方法中声明形参即可,传入pojo类还可以直接封装成形参声明的pojo类型。

一、什么是参数绑定?

取出请求的参数值直接绑定到handler⽅法的形参上

二、使用及测试

  1. 创建springmvc工程,引入相关的依赖,配置web.xml和springmv.xml文件,创建对应的controller层,请参考springmvc的基础使用

  2. servlet原生api的支持

    • 引入原生Servlet相关jar包

      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
      </dependency>
      
    • 测试代码:

      @RequestMapping("/handle02")
      public void handle02(HttpServletRequest request, HttpServletResponse response, HttpSession session){
      
          String id = request.getParameter("id");
          System.out.println(id);
      }
      
    • 测试:

      在这里插入图片描述

  3. 绑定简单类型参数,注意:布尔值只支持true,false,0,1;尽量使用包装类,因为基本类型没有null

    • 若handle方法中传参和请求中的参数名一致,则可以直接传入,若不一致,则需要在方法形参前加上@RequestParam(“请求中的参数名”)注解,测试代码:

      @RequestMapping("/handle03")
      public void handle03(@RequestParam("para1") Boolean para){
      
          System.out.println(para);
      }
      
    • 测试:

      在这里插入图片描述

  4. 绑定pojo类型参数,直接形参声明即可,类型就是Pojo的类型,形参名⽆所谓 ,但是要求传递的参数名必须和Pojo的属性名保持⼀致

    • 创建pojo类

      public class User {
      
          private Integer id;
      
          private String name;
      
          public Integer getId() {
              return id;
          }
      
          public void setId(Integer id) {
              this.id = id;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "id=" + id +
                      ", name='" + name + '\'' +
                      '}';
          }
      }
      
    • 测试代码:

      @RequestMapping("/handle04")
      public void handle04(User user){
          System.out.println(user);
      }
      
    • 测试:

      在这里插入图片描述

  5. 绑定Pojo包装对象参数(即成员变量中包含别的pojo类),直接将成员变量名一一对应上即可

    • 创建pojo类

      public class QueryVo {
      
          private String mail;
          private String phone;
      
          // 嵌套了另外的Pojo对象
          private User user;
      
          public String getMail() {
              return mail;
          }
      
          public void setMail(String mail) {
              this.mail = mail;
          }
      
          public String getPhone() {
              return phone;
          }
      
          public void setPhone(String phone) {
              this.phone = phone;
          }
      
          public User getUser() {
              return user;
          }
      
          public void setUser(User user) {
              this.user = user;
          }
      
          @Override
          public String toString() {
              return "QueryVo{" +
                      "mail='" + mail + '\'' +
                      ", phone='" + phone + '\'' +
                      ", user=" + user +
                      '}';
          }
      }
      
    • 测试代码:

      @RequestMapping("/handle05")
      public void handle05(QueryVo queryVo){
          System.out.println(queryVo);
      }
      
    • 测试:

      在这里插入图片描述

  6. 绑定⽇期类型参数(需要配置⾃定义类型转换器)

    • 由于前端传递过来的是一个日期字符串,绑定参数是Date日期类型,所以需要定义⼀个SpringMVC的类型转换器

      public class DateConverter implements Converter<String, Date> {
          @Override
          public Date convert(String s) {
              //从 String 转换成 Date类型
              SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
      
              try {
                  Date parse = simpleDateFormat.parse(s);
                  return parse;
              } catch (ParseException e) {
                  //case:若存在多种日期格式,可以在catch异常处理中再处理别的类型的日期
      
                  e.printStackTrace();
              }
      
              return null;
          }
      }
      
    • 在springmvc中注册自定义类型转换器

      在这里插入图片描述

    • 测试代码:

          @RequestMapping("/handle06")
          public void handle06(Date date){
              System.out.println(date);
          }
      
    • 测试:

      在这里插入图片描述

      若存在多种日期格式,可以在catch异常处理中再处理别的类型的日期


总结

  • springmvc封装了servlet操作,多个controller分别处理请求也解耦了相关的业务逻辑处理。
  • 基本类型或者pojo类直接对应各个属性的名称即可进行传参。
  • 请求传入String类型,形参接收为Date类型则需要自定义类型转换器。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值