我目前正在使用springboot服务,它需要具有修改从自身进行的各种Web服务调用接收的传入响应正文的功能。
我在Google上搜索了很多,可以找到有关Servlet过滤器,Spring拦截器等的信息。但是所有这些都位于此服务及其调用客户端之间。
但是我正在寻找一个组件,该组件可以位于此服务与其调用的其他服务之间。我能找到的最接近的是spring的ClientHttpRequestInterceptor,但是它似乎没有能力修改响应主体。
这里我需要一个2到3之间的分量。
有人可以阐明这一点吗?谢谢。
P.S:另外,我知道jaxrs ClientRequestFilter可以解决问题,但是我需要基于Spring RestTemplate的服务调用而不是基于jaxrs的解决方案。
答案 0 :(得分:3)
在Spring RestTemplate中,我们可以添加实现ClientHttpRequestInterceptor接口的拦截器。
此接口的拦截(HttpRequest,byte [],ClientHttpRequestExecution)方法将拦截给定的请求并通过允许我们访问该请求来返回响应,
ClientHttpRequestExecution参数执行实际的执行,并将请求传递给后续的流程链
public class BodyInterceptor
implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(
HttpRequest request,
byte[] body,
ClientHttpRequestExecution execution) throws IOException {
ClientHttpResponse response = execution.execute(request, body);
response.getHeaders().add("Iphone_version", "proX");
return response;
}
}
答案 1 :(得分:1)
Spring AOP可以为您提供帮助。在调用另一个控制器或组件之前,它可以充当组件。