优雅地处理参数传递:Spring Boot中的技巧

简介: 优雅地处理参数传递:Spring Boot中的技巧

一:四种传参方式

SpringBoot 接收参数的常用方式主要有以下几种:

1.1:在 URL 中传递参数

       可以通过在 URL 中添加参数来传递数据,例如:/user?id=123&name=Tom。在 SpringBoot 中,可以使用 @RequestParam 注解来获取请求参数。

7bc398dde1064613ac5bb88d0e119546.png

1.2:PathVariable 传递参数(Restful 风格)

      PathVariable 可以接受 URL 中的变量值,例如:/user/123,其中 123 就是一个变量。在 SpringBoot 中,可以使用 @PathVariable 注解来获取 URL 中的变量值。

76c6ea353d4d4e07b0217c2622472fa6.png

1.3:在请求体中传递参数

     可以将参数放在请求体中传递,例如:POST 请求中的表单数据或 JSON 数据。在 SpringBoot 中,可以使用 @RequestBody 注解来获取请求体中的参数。

0ad631599d0341be8589ab75d99a4644.png

1.4:在请求头中传递参数

     可以在请求头中添加参数,例如:JWT Token。在 SpringBoot 中,可以使用 @RequestHeader 注解来获取请求头中的参数。

c2a46e019f344d54b60ef02d23f259b1.png

二:文件上传接口测试

2.1 : test.java

 @PostMapping("/test10")
    public Result test10(@RequestParam("file") MultipartFile file) {
        return Result.ok(200);
    }

2d80778afa0b4bf89bfbf12d931d8b62.png

4badae1b6f7140e1aaf0c4dfd1d43df5.png

三、@RequestParam

3.1 多个参数

  @GetMapping("/test3")
    public Result test3(@RequestParam("id") Integer id ,
                        @RequestParam("name") String name){
        return Result.ok(name+id);
    }

执行结果:

bd23f2d1fa364fcd98492860831290f2.png

3.2 单个参数

    @PostMapping("/test4")
    public Result test4(@RequestParam("name") String name) {
        return Result.ok(name);
    }

执行结果:

ecd07c8a35ac4b0bb985bc0e99b7fa0f.png

四、@PathVariable

  @PathVariable 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志。

4.1  单个参数

@PostMapping("/test2/{id}")
    public Result test2(@PathVariable("id") Integer id) {
        return Result.ok(id);
    }

4.2  多个参数

@GetMapping("/test1/{id}/{name}")
    public Result test1(@PathVariable("id") Integer id,
                        @PathVariable("name") String name) {
        return Result.ok(id+":"+name);
    }

e33426be75544d0cbf003092be289fa7.png

五、@RequestBody

        @RequestBody一般被用来接收http请求中body中json数据。get、post都可以使用。一般用于post。

5.1  单个参数

注意:不支持 (@RequestBody String name 2,@RequestBody String name2)

@PostMapping("/test5")
    public Result test5(@RequestBody String name) {
        return Result.ok(name);
    }

不同传参得到的结果不同:

" 李四 "

5c1ea20761fc489d82620c831dd7bb47.png

JSON格式:

{
  "name": "李四"
}

21f661f1e62c412c98dc44461d872f43.png

5.2  User对象

@PostMapping("/test6")
    public Result test6(@RequestBody User user) {
        return Result.ok(user);
    }

结果:

af57bf7f905642f49fdf95fb25df595b.png

5.3  Map对象

    @PostMapping("/test7")
    public Result test7(@RequestBody HashMap map) {
        return Result.ok(map);
    }

结果:

5aa0222d388244f286a6436ef0666898.png

5.4  List 集合

@PostMapping("/test8")
    public Result test8(@RequestBody List<User> list) {
        return Result.ok(list);
    }

结果:

0d3fe64803da464b88b23ef06b5c4b02.png

六:RequestHeader

       @RequestHeader主要用来获取请求当中的请求头

代码示例:

    @PostMapping("/test9")
    public Result test9(@RequestHeader("token") String token ) {
        return Result.ok(token);
    }

结果:

6e4ce27ce5754a4e8440d5da5f7f1195.png

七、HttpServletRequest

       直接拿到request对象,通过request可以从对象中灵活的获取参数:

@RestController
@RequestMapping("/request")
public class HttpServletRequestController {
    @GetMapping("/getUrlValue")
    public String getUrlValue(HttpServletRequest request) {
        // 没有的时候不会报错,直接为null
        String msg = request.getParameter("msg");
        System.out.println(msg);
        return msg;
    }
    @GetMapping("/getUrlValues")
    public String getHttpServletRequestValue(HttpServletRequest request) {
        Map<String, String[]> parameterMap = request.getParameterMap();
        return JSONObject.toJSONString(request.getParameterMap());;
    }
}
目录
相关文章
|
6天前
|
XML Java 开发者
深入解析 Spring 和 Spring Boot 的区别
深入解析 Spring 和 Spring Boot 的区别
|
前端开发 JavaScript Java
【Spring Boot学习】一、使用Spring Initializer快速创建Spring Boot项目
【Spring Boot学习】一、使用Spring Initializer快速创建Spring Boot项目
695 1
【Spring Boot学习】一、使用Spring Initializer快速创建Spring Boot项目
|
6天前
|
XML Java 数据库连接
Spring框架与Spring Boot的区别和联系
Spring框架与Spring Boot的区别和联系
25 0
|
6天前
|
XML Java 开发者
Spring 和 Spring Boot 的区别
【2月更文挑战第3天】
91 2
|
8月前
|
JSON 安全 Java
Spring Boot中的安全过滤器及使用方法
Spring Boot中的安全过滤器及使用方法
|
9月前
|
Java 应用服务中间件 Maven
Spring Boot入门(一) 之 第一个Spring Boot程序
Spring Boot入门(一) 之 第一个Spring Boot程序
|
6月前
|
缓存 Java 开发者
常用的Spring Boot注解及其作用
Spring Boot是一个用于简化Java应用程序开发的框架,它提供了许多注解来简化开发和配置应用程序。这些注解能够帮助开发者减少重复的劳动,并提高开发效率。下面将详细介绍一些常用的Spring Boot注解及其作用。
|
6月前
|
XML Java 开发者
Spring基本了解以及方法
Spring基本了解以及方法
28 0
|
6月前
|
IDE Java 应用服务中间件
运行Spring Boot应用的5种方法
运行Spring Boot应用的5种方法
|
12月前
|
开发框架 前端开发 架构师
终于把 Spring Boot 3.0 写成书了!
终于把 Spring Boot 3.0 写成书了!