2017-02-19 18 views
0

Я получаю следующее исключение, когда пытаюсь получить User из моей веб-службы. org.springframework.web.client.RestClientException: не удалось извлечь ответ: не найдено подходящего HttpMessageConverter для типа ответа [класс com.shopping.model.User] и типа содержимого [текст/html; charset = ISO-8859-1]org.springframework.web.client.RestClientException

класс

Мой Пользователь помечается @XmlRootElement

код клиента:

RestTemplate rt = new RestTemplate(); 
rt.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
User x = rt.getForObject("http://localhost:8080/Online_Shopping/dispatcher/rest/hello",User.class); 

код Web Service:

@Controller 
@RequestMapping(value = "/rest") 
public class RESTController { 

@RequestMapping(value = "/hello", 
method = RequestMethod.GET, 
produces = MediaType.APPLICATION_XML_VALUE) 
public ResponseEntity<User> getUser() { 
    User x = new User("paymon","123",true); 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.setContentType(MediaType.APPLICATION_XML); 
    return new ResponseEntity<User>(x, responseHeaders, HttpStatus.CREATED); 
} 
+0

Кажется, что ваш клиент получает HTML ответ от API. Можете ли вы назвать свой api напрямую из браузера? Получаете ли вы контент xml или html? Вы можете попробовать использовать getForEntity вместо getForObject и также проверить заголовки. – alfcope

+0

Когда я обращаюсь к веб-службе непосредственно из браузера, возвращается XML-представление объекта. –

+0

Я думаю, у вас нет конвертера сообщений HTTP для зарегистрированного json. Что вы получаете при вызове rt.getMessageConverters() на вашем клиенте? – alfcope

ответ

0

Вам не нужно, чтобы установить заголовки ответов в объект ответа. Это делается автоматически весной, потому что ваше отображение производит xml, поэтому удалите его.

MappingJackson2HttpMessageConverter

Преобразователь вы добавляете к остальному шаблону является один используется для преобразования объектов JSON. Если вы измените свое сопоставление на MediaType.APPLICATION_JSON_VALUE, вы должны получить строку json.

Вы можете использовать MappingJackson2XmlHttpMessageConverter, если хотите использовать jackson для преобразования содержимого xml.

Rest xml response example with jackson 2

Jaxb2RootElementHttpMessageConverter

Jaxb2RootElementHttpMessageConverter является преобразователь по умолчанию используется Spring де/сериализация Java объектов в/из XML. Этот конвертер добавляется только в том случае, если Spring находит библиотеку JAXB2 в пути к классу, поэтому вам нужно включить эту зависимость, если у вас ее еще нет.

Http Message Converters with the Spring Framework

+0

Я добавил Jaxb2RootElementHttpMessagConverter к конвертерам, но все равно получаю то же исключение. Говорит, что тип содержимого - text/html, хотя я указываю xml. Я не понимаю, что вы подразумеваете, добавив зависимость JAX2B, потому что мне удалось импортировать org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter; –

+0

Я следил за последним учебником письма и до сих пор получаю то же исключение. Я не понимаю, почему он говорит, что тип содержимого - text/html –

+0

Имеет ли ваш клиент доступ к сервису? Является ли класс User на вашем клиенте тем же, что и ваш веб-сервис? Конечно, попробуйте получить String.class вместо User.class от вашего клиента и распечатать его. Вы получаете строку xml или одно и то же исключение? rt.getForObject ("URL", String.класс); – alfcope