开发者

SpringBoot如何获取Get请求参数详解

目录
  • 前言
  • 一、直接在请求路径中
  • 二、参数跟在 ? 号后面
    • 1,获取参数的基本方法
    • 2、使用 map 来接收参数
    • 3、接收一个集合
    • 4、通过对象接收参数
  • 总结

    前言

    利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数。下面演示 Controller 如何接收以&nbandroidsp;GET 方式传递过来的参数。

    一、直接在请求路径中

    (1)、假设请求地址是如下这种 RESTful 风格,Springboot 这个参数值直接放在路径里面

    http://localhost:8080/hello/Springboot

    (2)、Controller 定义,如下:

    @RestController
    public class HelloController {
        @GetMapping("/hello/{name}")
        public String hello(@PathVariable("name") String name){
     
            return "你好," + name + " !";
        }
    }

    SpringBoot如何获取Get请求参数详解

    二、参数跟在 ? 号后面

    1,获取参数的基本方法

    (1)假设请求地址是如下这种传统方式,参数跟在问号后面:

    http://localhost:8080/hello?name=Springboot

    (2)Controller 定义如下所示:

    @RestController
    publHFZTcPic class HelloController {
        @GetMapping("/hello")
        public String hello(@RequestParam("name") String name){
     
            return "你好," + name + " !";
        }
    }

    SpringBoot如何获取Get请求参数详解

    可以把在注解 @RequestParam 添加  required = false 设置参数为非必输项

    可以把在注解 @RequestParam 添加  defaultValue 参数 设置默认值。

    2、使用 map 来接收参数

    (1)Controller 还可以直接使用 map 来接收所有的请求参数:

    @RestController
    public class HelloController {
        @GetMapping("/hello")
        public String hello(@RequestParam Map<String, Object> map){
     
            return "图书: " + map.get("name") +  " 的作者为: " + map.get("author");
        }
    }

    (2)、结果如下所示:

    SpringBoot如何获取Get请求参数详解

    3、接收一个集合

    (1)、Controller 定义接收 数组或者List的方法,如下:

    @RestController
    public class HelloController {
     
        @GetMapping("/array")
        public String array(@RequestParam("name") String[] names){
     
            System.out.println("我是数组接收的参数:" + Arrays.toString(names));
     
            return "我是数组接收的参数:" + Arrays.toString(names);
        }
     
        @GetMapping("/list")
        public String list(@RequestParam("name")List<String> names){
            System.out.println("我是List接收的参数:" + names);
            return "我是List接收的参数:" + names.toString();
        }
     
    }

    (2)、测试结果

    SpringBoot如何获取Get请求参数详解

    SpringBoot如何获取Get请求参数详解

    4、通过对象接收参数

    如果一个 get 请求的参数太多,我们构造一个对象来简化参数的接收方式。

    (1)、定义一个基本对象Book 和 Controller

    public class Book {
        private String name;
        private String author;
        private Double price;
       // 省略 getter setter 方法
    }
    @RestController
    public class BookController {
        @GetMapping("/book")
        public Book book(Book book){
            System.out.println("接收到的参数为:" + book);
            return  book;
        }
    }

     (2)、基本用法:

    SpringBoot如何获取Get请求参数详解

    (3)、构造多个对象来接收参数,代码如下所示:

    public class User {
        private String username;
        private String password;
        // 省略 getter setter 方法
    }
    @RestC开发者_Python培训jsontroller
    public class BookController {
        @GetMapping("/book")
        public Book book(Book 编程book, User user){
            System.out.println("接收到的参数为:" + book);
            System.out.println("接收到的参数为:" + user);
            return  book;
        }
    }

    访问:

    SpringBoot如何获取Get请求参数详解

    输出结果:

    SpringBoot如何获取Get请求参数详解

    (4)、指定前缀。

    如果在多个对象参数的方法中,对象之间存在相同的 属性时 可以结合  @InitBinder 指定前缀的方式处理。如下所示,Book 对象和 Author 对象中都存在 name 属性。

        除了在 Controller 里单独定义预处理方法外,我们还可以通过 @ControllerAdvice&njsbsp;结合 @InitBinder 来定义全局的参数预处理方法,方便各个 Controller 使用

    public class Book {
        private String name;
        private String author;
    }
     
     
    public class Author {
        private String name;
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        @Override
        public String toString() {
            return "Author{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    @RestController
    public class BookController {
        @GetMapping("/book")
        public Book book(@ModelAttribute("b") Book book, @ModelAttribute("a") Author author){
            System.out.println("接收到的参数为:" + book);
            System.out.println("接收到的参数为:" + author);
            return  book;
        }
     
        // 添加  InitBinder 指定 前缀 b
        @InitBinder("b")
        private void initBinderB(WebDataBinder binder) {
            binder.setFieldDefaultPrefix("b.");
        }
     
        // 添加  InitBinder 指定 前缀 a
        @InitBinder("a")
        private void initBinderA(WebDataBinder binder) {
            binder.setFieldDefaultPrefix("a.");
        }
    }

    访问:

    SpringBoot如何获取Get请求参数详解

    结果:

    SpringBoot如何获取Get请求参数详解

    总结

    到此这篇关于SpringBoot如何获取Get请求参数的文章就介绍到这了,更多相关SpringBoot获取Get请求参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜