Search code examples
androidspringweb-servicesrestandroid-annotations

Rest client logging for AndroidAnnotations


I am attempting to use AndroidAnnotation's rest client to access a web service. I am receiving the following error:

org.springframework.http.converter.HttpMessageNotReadableException:
Could not read JSON: Unexpected character ('f' (code 102)):
    was expecting double-quote to start field name

How can I make the rest client log the actual response it received? I can't imagine why my web service is returning this response, but I can't debug it unless I can see the full response. Do I have to set some kind of option at the level of the Spring framework?

I would also like to see the body of the request I am sending.

Thanks for your help!


Solution

  • Here we see that AndroidAnnotations is a wrapper around the Spring Android RestTemplate Module. The code for the RestTemplate is here. So we can find out which TAG is used for logging:

    private static final String TAG = "RestTemplate";
    

    Are you not able to see log entries for this TAG? Which converter / extractor are you using? Please post the call stack.

    In the wiki they recommend to use a Interceptor for logging request / response. So you could implement your own interceptor like:

    public class LoggingInterceptor implements ClientHttpRequestInterceptor {
        @Override
        public ClientHttpResponse intercept(HttpRequest request, byte[] data, ClientHttpRequestExecution execution) throws IOException {
            logRequest(request);
            ClientHttpResponse response = execution.execute(request, data);
            logResponse(response);
            return response;
        }
    
        private void logRequest(HttpRequest request) {
            // log it
        }
    
        private void logResponse(ClientHttpResponse response) {
            // log it
        }
    }
    

    You enable the interceptor in the @Rest annotation (field interceptors).