springboot中如何在切面中重写请求参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot中如何在切面中重写请求参数相关的知识,希望对你有一定的参考价值。

参考技术A 极客架构
176粉丝
关注
Spring boot 2 中 重写Request 参数或添加Header 的正确姿势

极客架构
2019-09-25 06:40软件工程师,科技领域爱好者
关注
背景
由于公司架构调整,调整后Header参数发生变化,前端调用时参数名称发生变化,但这个参数在controller层已经定义,如果调整代码工作量很大。

解决思路
在过滤器(Filter)中,接收到Header参数后,把调整后的参数取出,生成一个新的参数添加至Header中。由于Filter在Controller之前执行,所以Controller感知不到参数发生变化。
HttpServletRequestWrapper

继承结构

查看 HttpServletRequestWrapper 继承关系,可以发现HttpServletRequestWrapper 实现了 ServletRequest .
Filter接口方法dofFilter中 处理Request请求的类型就是ServletRequest 。

Filter接口的方法

重写HttpServletRequestWrapper

Spring Boot - 如何通过带有查询参数的 url 发送 POST 请求并将响应存储在方法中?

【中文标题】Spring Boot - 如何通过带有查询参数的 url 发送 POST 请求并将响应存储在方法中?【英文标题】:Spring Boot - How to send a POST request via a url with query parameters and store the response inside a method? 【发布时间】:2021-12-06 04:50:18 【问题描述】:

我有一个 GET 方法生成的 url,它有点像这种格式:

https://service-name/api?param1=<value1>&param2=<value2>&param3=<value3>.....

我需要点击这个网址并将响应(类型为application/x-www-form-urlencoded)存储到一个变量中,以便进一步使用。

问题是它需要在方法内部完成(获取url并传递它以获得响应)。

怎么办?

【问题讨论】:

听起来你需要使用http client,例如restTemplate 【参考方案1】:

对于 Spring Boot 应用程序使用外部 API,您可以使用 RestTemplate。

下面是一个使用示例。您收到的响应是字符串类型。

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
headers.add("Header", "header1");


UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("https://foo/api/v3/projects/1/labels")
        .queryParam("param1", param1)
        .queryParam("param2", param2);

HttpEntity<?> entity = new HttpEntity<>(headers);

HttpEntity<String> response = restTemplate.exchange(
        builder.toUriString(), 
        HttpMethod.GET, 
        entity, 
        String.class);

【讨论】:

以上是关于springboot中如何在切面中重写请求参数的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot @Aspect 切面编程实现访问请求日志记录

springboot通过切面编程实现系统请求操作日志记录

我怎样才能通过在请求中传递特定参数来获取它们? SpringBoot API

关于SpringBoot过滤器过滤get及post请求中的XSS和SQL注入

SpringBoot 跨域请求处理

使用HttpServletRequestWrapper重写Request请求参数