zoukankan      html  css  js  c++  java
  • Spring学习之旅(八)--SpringMVC请求参数

    现在我们已经完成了一个无参的接口了,但是应用中有很多需要携带参数的场景,我们来看看 ** SpringMVC** 对它的支持。

    参数绑定

    SpringMVC 提供了一种绑定机制,通过这个机制可以从请求中提取数据,然后将数据转换为预定义的数据格式,最后映射到一个模型类,从而创建一个对象。该实现机制只需请求参数名称与 Java 类的属性相匹配即可。

    SpringMVC 允许以多种方式将客户端的数据传送到** Controller**方法中:

    • 查询参数
    • 表单参数
    • 路径变量

    查询参数和表单参数

    1.新建 RequestParameterController 类

    @Controller
    public class RequestParameterController {
        @RequestMapping("/requestParameterPage")
        public String index(){
            return "index";
        }
        @RequestMapping("/toInt")
        public String toInt(int count){
            System.out.println("基本数据类型:"+count);
            return "index";
        }
        @RequestMapping("/toInteger")
        public String toInteger(Integer integer){
            System.out.println("包装数据类型:"+integer);
            return "index";
        }
        @RequestMapping("/toObject")
        public String toObject(User item){
            System.out.println("自定义数据类型:name:"+item.getUserName()+";age:"+item.getAge());
            return "index";
        }
        @RequestMapping("/toInt2")
        public String toInt2(@RequestParam(value = "id")int count){
            System.out.println("参数名词不一致基本数据类型:"+count);
            return "index";
        }
        @RequestMapping("/toArray")
        public String toArray(String[] id){
            System.out.println("数组对象:"+ Arrays.asList(id));
            return "index";
        }
        @RequestMapping("/toDefault")
        public String toDefault(@RequestParam(value = "userAge" ,defaultValue = "0",required=false) Integer age){
            System.out.println("age:"+ age);
            return "index";
        }
    }
    

    2.新建 index 页面

    <html>
    	<head></head>
    	<body>
    	    <a href="/test/toInt?count=1">基本数据</a><br>
    	    <a href="/test/toInteger?integer=2">包装数据类型</a><br>
    	    <a href="/test/toObject?userName=marklogzhu&&age=18">自定义数据类型</a><br>
    	    <a href="/test/toInt2?id=1">参数名词不一致基本数据</a><br>
    	    <a href="/test/toArray?id=1&id=2&id=3">数组对象</a><br>
    		<a href="/test/toDefault?userAge=25">参数名与方法名不一致,通过@RequestParam注解</a><br>
    	</body>
    </html>
    

    3.依次点击,查看控制台输出

    数组对象:[1, 2, 3]
    基本数据类型:1
    包装数据类型:2
    自定义数据类型:name:marklogzhu;age:18
    参数不一致基本数据类型:1
    数组对象:[1, 2, 3]
    age:25
    

    路径变量

    像上面参数传送方式都需要客户端指定参数名称

    /toObject?name=marklogzhu&age=18
    

    但是我们也可以通过请求路径来实现参数传递:

    @RequestMapping(value = "/toPath/{index}")
    @ResponseBody
    public void toPath(@PathVariable("index") String index) {
        System.out.println(index);
    }
    
    /toPath/999
    

    如果请求参数少并且一定会有值的话,这种方式也是相当简便的。


    参数校验

    在客户端调用接口的时候,后端通常需要检查一下客户端传递的参数有效性,一般情况下会有一大堆的 IF 代码存在,例如:

    @RequestMapping("/toObject")
    @ResponseBody
    public String toUser(User user) {
        if (user == null) {
            return "参数有误";
        }
        if (user.getAge() <= 0) {
            return "用户年龄有误";
        }
        if (StringUtils.isEmpty(user.getName())) {
            return "用户姓名有误";
        }
        return "成功";
    }
    

    我们之前提到过 Spring 最根本的使命就是 简化Java开发,自然 SpringMVC 也为我们提供了参数校验的支持以避免这种代码的出现。详情请看 参数校验工具-BeanValidator

  • 相关阅读:
    理解FreeRTOS的任务状态机制
    stm32【按键处理:单击、连击、长按】
    stm32f4单片机 硬件浮点运算
    stm32 HAL库 串口无法接收数据的问题
    Single Sign On —— 简介(转)
    关于第三方库安装时很慢或者读取超时问题处理
    设计模式》状态机模式
    设计模式》责任链模式
    设计模式》访问者模式
    设计模式》策略者模式
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/11400460.html
Copyright © 2011-2022 走看看