• Spring MVC 请求参数绑定



    Spring MVC 是一个用于构建 Web 应用程序的框架,它提供了一种方便的方式来处理 HTTP 请求和响应。在 Spring MVC 中,请求参数绑定是将 HTTP 请求中的参数映射到控制器方法的参数上的过程。Spring MVC 提供了多种方式来实现请求参数绑定。
    请求参数绑定:说⽩了SpringMVC如何接收请求参数
    http协议(超⽂本传输协议)
    原⽣servlet接收⼀个整型参数:

    String ageStr = request.getParameter("age");
    Integer age = Integer.parseInt(ageStr);
    
    • 1
    • 2

    SpringMVC框架对Servlet的封装,简化了servlet的很多操作
    SpringMVC在接收整型参数的时候,直接在Handler⽅法中声明形参即可

    @RequestMapping("xxx")
    public String handle(Integer age) {
    	System.out.println(age);
    }
    
    • 1
    • 2
    • 3
    • 4

    参数绑定:取出参数值绑定到handler⽅法的形参上

    默认⽀持 Servlet API 作为⽅法参数

    当需要使⽤HttpServletRequest、HttpServletResponse、HttpSession等原⽣servlet对象时,直接在handler⽅法中形参声明使⽤即可。

    /**
    *
    * SpringMVC 对原⽣servlet api的⽀持 url:/demo/handle02?id=1
    *
    * 如果要在SpringMVC中使⽤servlet原⽣对象,⽐如
    HttpServletRequest\HttpServletResponse\HttpSession,直接在Handler⽅法形参中声
    明使⽤即可
    *
    */
    @RequestMapping("/handle02")
    public ModelAndView handle02(HttpServletRequest request,HttpServletResponse response,HttpSession session) {
        String id = request.getParameter("id");
        Date date = new Date();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("date",date);
        modelAndView.setViewName("success");
        return modelAndView;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    绑定简单类型参数

    在 Spring MVC 中,您可以通过将控制器方法的参数与 HTTP 请求中的参数名匹配来进行简单参数的请求参数绑定。
    简单数据类型:⼋种基本数据类型及其包装类型
    参数类型推荐使⽤包装数据类型,因为基础数据类型不可以为null。
    整型:Integer、int
    字符串:String
    单精度:Float、float
    双精度:Double、double
    布尔型:Boolean、boolean
    说明:对于布尔类型的参数,请求的参数值为true或false。或者1或0
    注意:绑定简单数据类型参数,只需要直接声明形参即可(形参参数名和传递的参数名要保持⼀致,建议 使⽤包装类型,当形参参数名和传递参数名不⼀致时可以使⽤@RequestParam注解进⾏⼿动映射)

        /*
        * SpringMVC 接收简单数据类型参数 url:/demo/handle03?id=1
        *
        * 注意:接收简单数据类型参数,直接在handler⽅法的形参中声明即可,框架会取出参数值
        然后绑定到对应参数上
        * 要求:传递的参数名和声明的形参名称保持⼀致
        */
        @RequestMapping("/handle03")
        public ModelAndView handle03(@RequestParam("ids") Integer id,Boolean flag) {
            Date date = new Date();
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("date",date);
            modelAndView.setViewName("success");
            return modelAndView;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    绑定Pojo类型参数

    自动请求参数绑定:Spring MVC 还支持自动将请求参数绑定到对象上。例如,您可以创建一个 POJO(Plain Old Java Object)类,将其属性与请求参数名相匹配,Spring MVC 将自动将请求参数绑定到这个对象上。

        /*
        * SpringMVC接收pojo类型参数 url:/demo/handle04?id=1&username=zhangsan
        *
        * 接收pojo类型参数,直接形参声明即可,类型就是Pojo的类型,形参名⽆所谓
        * 但是要求传递的参数名必须和Pojo的属性名保持⼀致
        */
        @RequestMapping("/handle04")
        public ModelAndView handle04(User user) {
            Date date = new Date();
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("date",date);
            modelAndView.setViewName("success");
            return modelAndView;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 绑定Pojo包装对象参数

    包装类型 QueryVo

    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    Handler⽅法

        /*
        * SpringMVC接收pojo包装类型参数 url:/demo/handle05?
        user.id=1&user.username=zhangsan
        * 不管包装Pojo与否,它⾸先是⼀个pojo,那么就可以按照上述pojo的要求来
        * 1、绑定时候直接形参声明即可
        * 2、传参参数名和pojo属性保持⼀致,如果不能够定位数据项,那么通过属性名 + "." 的
        ⽅式进⼀步锁定数据
        *
        */
        @RequestMapping("/handle05")
        public ModelAndView handle05(QueryVo queryVo) {
            Date date = new Date();
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("date",date);
            modelAndView.setViewName("success");
            return modelAndView;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

    • 前端jsp

    在这里插入图片描述

    • 后台Handler⽅法
        /**
        * 绑定⽇期类型参数
        * 定义⼀个SpringMVC的类型转换器 接⼝,扩展实现接⼝接⼝,注册你的实现
        * @param birthday
        * @return
        */
        @RequestMapping("/handle06")
        public ModelAndView handle06(Date birthday) {
            Date date = new Date();ModelAndView modelAndView = new
            ModelAndView();
            modelAndView.addObject("date",date);
            modelAndView.setViewName("success");
            return modelAndView;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • ⾃定义类型转换器
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    /**
    * @author 应癫
    * ⾃定义类型转换器
    * S:source,源类型
    * T:target:⽬标类型
    */
    public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String source) {
        // 完成字符串向⽇期的转换
        SimpleDateFormat simpleDateFormat = new
        SimpleDateFormat("yyyy-MM-dd");
        try {
        Date parse = simpleDateFormat.parse(source);
        return parse;
        } catch (ParseException e) {
        e.printStackTrace();
        }
        return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 注册⾃定义类型转换器
    
    <mvc:annotation-driven conversionservice="conversionServiceBean"/>
    
    <bean id="conversionServiceBean"
      class="org.springframework.format.support.FormattingConversionServiceF
      actoryBean">
      <property name="converters">
        <set>
          <bean class="com.zjq.converter.DateConverter">
          bean>
        set>
      property>
    bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    路径变量参数

    除了请求参数绑定,Spring MVC 还支持路径变量的绑定。路径变量是在 URL 中包含的变量,可以通过 @PathVariable 注解来绑定到控制器方法的参数上。

    @Controller
    @RequestMapping("/example")
    public class ExampleController {
    
        @RequestMapping("/process/{id}")
        public String processRequest(@PathVariable("id") Long id) {
            // 使用路径变量 id 进行处理
            
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在上述示例中,@PathVariable 注解用于将路径变量 “id” 绑定到控制器方法的参数 “id” 上。

    本文内容到此结束了,
    如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
    如有错误❌疑问💬欢迎各位指出。
    主页共饮一杯无的博客汇总👨‍💻

    保持热爱,奔赴下一场山海。🏃🏃🏃

  • 相关阅读:
    android studio 字节码查看工具jclasslib bytecode viewer
    【项目实战】自主实现 HTTP 项目(四)——处理请求和构建相应
    操作系统是干什么的?
    Himall验证Web帮助类HTML解码
    【Unity3D】固定管线着色器一
    y123.第七章 服务网格与治理-Istio从入门到精通 -- Sidecar及流量拦截机制(九)
    HashMap源码
    FPGA project :HDMI
    原来你是这样的JAVA--[07]聊聊Integer和BigDecimal
    ssm工业关键设备监测运维系统毕业设计-附源码191400
  • 原文地址:https://blog.csdn.net/qq_35427589/article/details/133074590