Tôi đang sử dụng lớp Spring Interceptor đơn giản để ghi lại tất cả các yêu cầu/phản hồi REST cho đối tượng RestTemplate trong ứng dụng Android của tôi. Cho đến nay tất cả mọi thứ hoạt động tốt.Đọc nội dung phản hồi trong Bộ chặn Android của Android
public class LoggerInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body,
ClientHttpRequestExecution execution) throws IOException {
Log.d(TAG, "Request body: " + new String(body));
// ...more log statements...
ClientHttpResponse response = execution.execute(request, body);
Log.d(TAG, "Response Headers: " + response.getHeaders());
return response;
}
Tại khởi tôi gọi:
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
LoggerInterceptor loggerInterceptor = new LoggerInterceptor();
interceptors.add(loggerInterceptor);
restTemplate.setInterceptors(interceptors);
Tuy nhiên tôi không thể đăng nhập response.getBody()
trong các phương pháp trên vì InputStream được tiêu thụ một lần và ném một IllegalStateException khi nó được tiêu thụ lại sau. Có cách nào xung quanh điều này để tôi có thể đăng nhập cơ thể phản ứng quá?
Sử dụng khung công tác Spring 3.1 trở lên, đây chắc chắn là giải pháp thanh lịch hơn. – Nachi