2013-11-26 1 views
0

У меня нет проблем с использованием SpringTemplate Spring, чтобы сделать POST или GET вызовы на конечную точку. Я также установил конвертер сообщений как JSON (MappingJacksonHttpMessageConverter), без проблем.Как вы получаете преобразованный запрос из RestTemplate после вызова GET/POST/PUT?

Мой вопрос в том, как я могу захватить преобразованный запрос, который я отправляю?

Например, если я делаю это:

ResponseEntity<T> result = this.restTemplate.postForEntity("http://{endpoint_url...}", dtoEntryObj, SomeDTO.class); 

Как я мог захватить JSON, что он посылает к конечной точке?

+0

Не так ли в dtoEntryObj? – crownjewel82

+0

Нет, потому что это исходный объект, который я передаю. Вы можете притворяться, что это карта или список или что-то еще. RestTemplate автоматически преобразует его, так как я устанавливаю свой конвертер сообщений. –

ответ

0

RestTemplate может отправлять форматы, отличные от json. Чтобы получить фактический объем запроса, вам необходимо реализовать свой собственный ClientHttpRequestInterceptor и использовать RestTemplate#setInterceptors() для его регистрации.

Что-то вроде

RestTemplate template = new RestTemplate(); 
ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() { 

    @Override 
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, 
      ClientHttpRequestExecution execution) throws IOException { 
     // you have access to the body 
     // do something with it 
     return execution.execute(request, body); 
    } 
}; 
template.setInterceptors(Arrays.asList(interceptor)); 

Обратите внимание, что с JSON, RestTemplate использует MappingJackson2MessageConverter, который внутренне использует ObjectMapper. Вы можете имитировать его, если вышеуказанное решение не работает для вас.