spring 如何在Sping Boot 中从HttpServletRequest读取请求主体并将同一请求重定向到另一个端点

e5nqia27  于 2023-03-11  发布在  Spring
关注(0)|答案(1)|浏览(123)

请求将到达一个API网关,我希望在此提取请求主体并存储在DB中。然后请求将被路由到另一个服务,在此执行请求。
目前,当我使用request.getInputStream()时,此数据将无法用于其他服务。
HttpServletRequest是一个公开getInputStream()方法以读取主体的接口。默认情况下,来自此InputStream的数据
只能读取一次

参考https://www.baeldung.com/spring-reading-httpservletrequest-multiple-times#:~:text=Spring's%20ContentCachingRequestWrapper,-Spring%20provides%20a&text=This%20class%20provides%20a%20method,body%20by%20consuming%20the%20InputStream.,但我们仍然在网关服务中使用request.getInputStream(),因此它在以后不可用。
有谁能帮个忙吗

js81xvg6

js81xvg61#

您可以使用Springboot中的restTemplate类创建新请求,该类出现在Spring Web包中。
你可以这样做:

HttpEntity<String> newrequest = new HttpEntity<>(requestBody, headers);
    ResponseEntity<String> response = restTemplate.exchange(
        "http://localhost:8080/myother-endpoint",
        HttpMethod.POST,
        newrequest,
        String.class
    );

在使用restTemplate之前,首先配置bean:

@Configuration
public class MyTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

并使用@Autowired注解将其注入控制器类。

相关问题