我希望在webservice上为每个请求设置两个拦截器。一个用于传出通信,一个用于响应。
我正在使用正在传出的ClientHttpRequestInterceptor
。我的设置如下:
//Rest template
RestTemplate tpl = api.getRestTemplate();
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
interceptors.add( new OutgoingRequestInterceptor() );
tpl.setInterceptors( interceptors );
但是,我希望传入(响应)这样的拦截器。我检查了Spring Framework源代码,但我找不到任何东西。
任何提示?
编辑:
也许我感到困惑或者脑子里有什么不对劲。我今天病了。
我的拦截器类中有以下代码:
@Override
public ClientHttpResponse intercept( HttpRequest request, byte[] bytes, ClientHttpRequestExecution requestExecution ) throws IOException
{
SLog.d( "intercepted!!"+request.getURI()+". Bytes: "+bytes );
try
{
Thread.sleep( 5000 );
}
catch ( InterruptedException e )
{
e.printStackTrace();
}
ClientHttpResponse response = requestExecution.execute( request, bytes );
SLog.d( "Response Headers: " + response.getHeaders());
return response;
}
问题:此代码是否适用于传出,传入或两者兼而有之?
因为日志:request.getUri()
正在返回目标网址。
然后,在Response
对象上,我获得WebService发送的标题。
所以我确信,响应实际上是服务器响应。但是...... getUri()
怎么样?是在实际发送请求之前触发,还是之后?
答案 0 :(得分:0)
好。经过一些棘手的调试后,我明白了。
即使拦截器类被称为ClientHttpRequestInterceptor,它也会拦截两者。来自客户端的请求,并从服务器中休息。
这个拦截器类就像一个包装器。
因此...
response.getBody()
是一个InputStream,您将使用它,因此之后它将为null。我这样说是因为你不能直接记录它。你要先镜像它。