文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-12-08 20:54

关注

前言

利用 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请求参数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯