Col*_*b1a 1 java spring-mvc resttemplate spring-resttemplate
我面临以下问题:
我正在使用一个简单的方法调用另一个服务org.springframework.web.client.RestTemplate
调用它时,我需要拦截请求,修改请求正文,并让它继续流程。到目前为止,我没有遇到任何问题,因为org.springframework.http.client.ClientHttpRequestInterceptor
我可以对我的请求执行任何我想要的操作(在将其发送到我正在调用的服务之前将 RequestObjectA 转换为 requestObjectB)。
问题:如何修改响应体?
我看到调用时ClientHttpResponse execute = clientHttpRequestExecution.execute(httpRequest, body)
我可以让身体做execute.getBody()
,所以我可以修改它,但我没有找到一种方法以某种方式将其设置回来。
有什么办法可以将我修改后的身体设置为ClientHttpResponse
?
ClientHttpResponse
轴承修改后需要返回一个新的对象
我们可以将originalResponse的相关数据复制到ClientHttpResponse新创建的modifiedResponse对象中
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
ClientHttpResponse response = execution.execute(request, body);
String responseBody = new String(response.getBody().readAllBytes());
String modifiedBody = "Just Modified";
ClientHttpResponse modifiedResponse = new ClientHttpResponse() {
@Override
public HttpHeaders getHeaders() {
return response.getHeaders();
}
@Override
public InputStream getBody() throws IOException {
return new ByteArrayInputStream(modifiedBody.getBytes());
}
@Override
public HttpStatus getStatusCode() throws IOException {
return response.getStatusCode();
}
@Override
public int getRawStatusCode() throws IOException {
return response.getRawStatusCode();
}
@Override
public String getStatusText() throws IOException {
return response.getStatusText();
}
@Override
public void close() {
}
};
return modifiedResponse;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4423 次 |
最近记录: |