优雅地处理参数传递: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());;
    }
}
目录
相关文章
|
存储 Java 应用服务中间件
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
1175 0
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
|
SQL 缓存 Java
Mybatis-plus缓存机制
MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,提供了更便捷的CRUD操作和其他功能。与MyBatis相比,MyBatis-Plus并没有引入自己的缓存机制,而是直接使用了MyBatis的缓存机制。 在MyBatis中,缓存分为一级缓存和二级缓存。 1. 一级缓存:一级缓存是SqlSession级别的缓存,它默认是开启的。当查询操作执行时,查询的结果会被缓存在SqlSession的内部数据结构中。如果后续再次执行相同的查询,MyBatis会先检查一级缓存中是否存在结果,如果存在则直接返回缓存的结果,而不会再次执行SQL语句。一级缓存的生命周期与SqlSession相同,
1635 0
|
JSON Java API
玩转Spring Boot之RestTemplate的使用
在java代码里想要进行restful web client服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。Spring Boot提供了一种简单便捷的内置模板类来进行操作,这就是RestTemplate。
6472 0
|
7月前
|
人工智能 缓存 负载均衡
spring boot-MultipartFile 机制
本文详解了 Spring Boot 中 MultipartFile 的工作机制及大文件上传的解决方案。内容涵盖 MultipartFile 的解析流程、上传配置、Feign 上传大文件的内存问题及基于 RestTemplate 的流式上传实现。同时介绍了服务器端如何直接处理 application/octet-stream 类型的文件流,避免内存溢出问题。适合需要优化文件上传性能的开发者参考。
863 0
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
1012 8
|
负载均衡 Java 应用服务中间件
|
Prometheus 监控 Cloud Native
【监控】Spring Boot+Prometheus+Grafana实现可视化监控
【监控】Spring Boot+Prometheus+Grafana实现可视化监控
884 6
|
IDE Cloud Native 小程序
IDEA 中 30 秒生成 Spring Cloud Alibaba 工程
近日,阿里巴巴发布了 Spring 的国内脚手架定制版 Aliyun Java Initializer,因为全中文界面和流畅速度,被广大开发者热传。Spring 脚手架为开发者提供了丰富的可选组件,并且可以选择多种打包方式,大大方便了开发人员的使用。
17080 0
IDEA 中 30 秒生成 Spring Cloud Alibaba 工程
|
存储 分布式计算 Kubernetes
微服务想用好,先把分布式和微服务之间的关系搞清楚
微服务想用好,先把分布式和微服务之间的关系搞清楚
微服务想用好,先把分布式和微服务之间的关系搞清楚
|
安全 Java 数据库
Spring Security自定义登录认证
Spring Security自定义登录认证
693 0