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

 更新时间:2022年12月06日 10:30:29   作者:瞎胡扯  
SpringBoot为我们封装了许多简便的获取请求参数的方法,下面这篇文章主要给大家介绍了关于SpringBoot如何获取Get请求参数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数。下面演示 Controller 如何接收以 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 + " !";
    }
}

二、参数跟在 ? 号后面

1,获取参数的基本方法

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

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

(2)Controller 定义如下所示:

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

可以把在注解 @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)、结果如下所示:

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)、测试结果

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)、基本用法:

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

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

访问:

输出结果:

(4)、指定前缀。

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

    除了在 Controller 里单独定义预处理方法外,我们还可以通过 @ControllerAdvice 结合 @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请求参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 完美解决Java中的线程安全问题

    完美解决Java中的线程安全问题

    下面小编就为大家带来一篇完美解决Java中的线程安全问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java利用反射对list对象做过滤

    Java利用反射对list对象做过滤

    这篇文章主要介绍了Java利用反射对list对象做过滤,但是使用反射对效率有影响,但在一些特殊情况也有一定的参考价值,需要的小伙伴可以参考一下
    2022-03-03
  • Java 的抽象类原理与用法分析

    Java 的抽象类原理与用法分析

    这篇文章主要介绍了Java 的抽象类原理与用法,结合实例形式分析了java抽象类与接口的相关概念、原理、使用方法及操作注意事项,需要的朋友可以参考下
    2019-12-12
  • Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案

    Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案

    这篇文章主要介绍了Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • redis与spring整合使用的步骤实例教程

    redis与spring整合使用的步骤实例教程

    这篇文章主要给大家介绍了关于redis与spring整合使用的相关资料,文中通过示例代码将实现的步骤一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • 实例讲解Java读取一般文本文件和word文档的方法

    实例讲解Java读取一般文本文件和word文档的方法

    读取一般文本文件很好办,调用Java自带的io包里的类即可,富文本的doc文件我们可以用Apache的poi项目中的WordExtractor,这里我们一起来以实例讲解Java读取一般文本文件和word文档的方法
    2016-06-06
  • springboot 如何重定向redirect 并隐藏参数

    springboot 如何重定向redirect 并隐藏参数

    这篇文章主要介绍了springboot 如何重定向redirect 并隐藏参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • JAVA提高第九篇 集合体系

    JAVA提高第九篇 集合体系

    这篇文章主要为大家详细介绍了JAVA提高第九篇集合体系的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Spring IOC xml方式进行工厂Bean操作详解

    Spring IOC xml方式进行工厂Bean操作详解

    这篇文章主要介绍了Spring IOC xml方式进行工厂Bean操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • SpringBoot ScheduledTaskRegistrar解决动态定时任务思路详解

    SpringBoot ScheduledTaskRegistrar解决动态定时任务思路详解

    本文将从问题出发,详细介绍ScheduledTaskRegistrar类是如何解决动态调整定时任务的思路,并给出关键的代码示例,帮助大家快速地上手学习
    2023-02-02

最新评论