Spring Boot中的 6 种API请求参数读取方式

使用Spring Boot开发API的时候,读取请求参数是服务端编码中最基本的一项操作,Spring Boot中也提供了多种机制来满足不同的API设计要求。

@RequestParam

这是最常用的一个了吧,用来加载URL中?之后的参数。

比如:这个请求/user?name=didispace 就可以如下面这样,使用@RequestParam来加载URL中的name参数

    @GetMapping("/param")
    @ResponseBody()
    public String getRequestParamValue(@RequestParam("name") String name) {
        return "输入的参数为:" + name;
    }

@PathVariable
这是RESTful风格API中常用的注解,用来加载URL路径中的参数

比如:这个请求/user/1 就可以如下面这样,使用@PathVariable来加载URL中的id参数

    @GetMapping("/path/{id}")
    @ResponseBody()
    public String getPathVariableValue(@PathVariable("id") String id) {
        return "输入的参数为:" + id;
    }

@MatrixVariable 矩阵变量
在使用 矩阵变量 的时候,首先要了解到 Spring Boot 默认禁用了矩阵变量的功能,这是因为默认的UrlPathHelper会移除分号;后面的内容,导致矩阵变量无法被解析。

手动开启矩阵变量功能的方法是通过配置UrlPathHelper,设置removeSemicolonContentfalse,以支持矩阵变量的解析。

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        UrlPathHelper urlPathHelper = new UrlPathHelper();

        // 不移除;后面的内容。矩阵变量功能就可以生效
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }
}

这个我们用的并不是很多,了解即可,但一些国外系统有提供这类API参数,这种API的参数通过;分割,需要注意的是,矩阵变量依赖于路径变量,因为矩阵变量是嵌入在路径变量中的。也就是说,矩阵变量的值是通过路径变量来传递的。

比如:这个请求/matrixvariable/reviews;isbn=1234;topN=5; 就可以如下面这样,使用@MatrixVariable来加载URL中用;分割的参数

    @GetMapping("/matrixvariable/{path}")
    @ResponseBody()
    public String getMatrixVariableValue(@MatrixVariable String isbn, @MatrixVariable String topN, @PathVariable String path) {
        return "输入的参数为:" + isbn + "," + topN + "," + path;
    }

// 结果 输入的参数为:1234,5,reviews

@RequestBody
这也是最常用的一个注解,用来加载POST/PUT请求的复杂请求体(也叫:payload)。比如,客户端需要提交一个复杂数据的时候,就要将这些数据放到请求体中,然后服务端用@RequestBody来加载请求体中的数据

    @PostMapping("/body")
    @ResponseBody()
    public String getBodyValue(@RequestBody String param) {
        return "输入的参数为:" + param;
    }

@RequestHeader
@RequestHeader注解用来加载请求头中的数据,一般在业务系统中不太使用,但在基础设施的建设中会比较常用,比如传递分布式系统的TraceID等。用法也很简单,比如,假设我们将鉴权数据存在http请求头中,那么就可以像下面这样用@RequestHeader来加载请求头中的Authorization参数

    @GetMapping("/header")
    @ResponseBody()
    public String getHeaderValue(@RequestHeader("Authorization") String authToken) {
        return "输入的参数为:" + authToken;
    }

@CookieValue
当我们需要与客户端保持有状态的交互时,就需要用到Cookie。此时,服务端读取Cookie数据的时候,就可以像下面这样用@CookieValue来读取Cookie中的SessionId数据

    @GetMapping("/cookie")
    @ResponseBody()
    public String getCookieValue(@CookieValue(name = "SessionId") String sessionId) {
        return "接收到的参数为:" + sessionId;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值