2013-11-26 3 views
0

В настоящее время я создаю клиент REST, который имеет почти такой же код, что и в руководстве Consuming a RESTful Web Service. Этот простой пример отлично работает при получении действительных ответов JSON, но поскольку я также занимаюсь разработкой веб-службы, я хотел бы иметь возможность захватить содержимое сырого ответа в случае, если ответ недействителен JSON (без необходимости отправки запроса дважды).Весна улавливает все типы откликов

Поэтому в основном руководство сводится к этому коду:

RestTemplate restTemplate = new RestTemplate(); 
Page page = restTemplate.getForObject("http://graph.facebook.com/gopivotal", Page.class); 
System.out.println("Name: " + page.getName()); 
System.out.println("About: " + page.getAbout()); 
System.out.println("Phone: " + page.getPhone()); 
System.out.println("Website: " + page.getWebsite()); 

И на основе этого класса:

package hello; 

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Page { 

    private String name; 
    private String about; 
    private String phone; 
    private String website; 

    public String getName() { 
     return name; 
    } 

    public String getAbout() { 
     return about; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public String getWebsite() { 
     return website; 
    } 

} 

Теперь представьте, что ответ не действует в формате JSON (из-за ошибки в webservice или так) или даже, что тип ответа не application/json, как я могу зарегистрировать тело ответа как обычный текст? То есть как я могу получить доступ к телу ответа в виде обычного текста, когда эта линия не может:

Page page = restTemplate.getForObject("http://graph.facebook.com/gopivotal", Page.class); 

PS: Я наткнулся на this question - который никогда не получил ответа - и хотя я не уверен, я думаю, что фактическое намерение этого кода соответствует моему вопросу.

ответ

2

Вы должны реализовать свой собственный ResponseErrorHandler и подключить его к компоненту RestTemplate.

что-то вроде:

public class LogResponseErrorHandler implements ResponseErrorHandler { 
... 
    @Override 
    public void handleError(ClientHttpResponse response) throws IOException { 
     logResponse(response.getBody()); 
    } 
... 
} 

an article about the concrete usage of ResponseErrorHandler:

+0

Спасибо, это было то, что я искал! – DePhille

Смежные вопросы