Исключение HttpMessageConverter: RestClientException: Не удалось записать запрос: не найдено подходящего HttpMessageConverter - PullRequest
0 голосов
/ 12 февраля 2019

Я пишу клиенту для использования службы RESTful.Я должен отправить запрос в ключе, значении пары, они предложили мне использовать карту для этого.Служба RESTful, которую я вызываю, только примет JSON, а мой клиент будет на Java.Фактически он станет частью существующего корпоративного EJB-проекта.

Я написал клиента и могу успешно вызвать службу RESTful.На самом деле, если я отправляю запрос в формате String (формат JSON), я даже получаю ответ обратно.Но я хотел бы избежать этой ручной работы по преобразованию карты в строку формата JSON и последующей ее отправке в запросе.

Я установил Content-Type как application / json и создал карту, которая будет содержатьпара KeyValue.

Фрагмент кода от клиента:

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_JSON);
headers.add(MyConstants.JWT_AUTH_TOK, restUtil.getJWTToken());

restTemplate = new RestTemplate();

ModelReqVO modVO = new ModelReqVO();
Map<String, String> dataMap = new HashMap<String, String>();
//Setting key,value into datamap (e.g. "key1", "value1")
modVO.setDataMap(dataMap);

ResponseEntity<ModelRspnsVO> result = restTemplate.postForEntity(mySrvcFN, new HttpEntity(modVO, headers), ModelRspnsVO.class);

Класс запроса (ModelReqVO):

public class ModelReqVO {

private HashMap<String, String> dataMap;

ModelReqVO() {
    this.dataMap = new HashMap<String, String>();
}

//getter and setter generated
}

Это исключение, которое я получаю-

RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [com.mycomp.myproj.ModelReqVO] and content type [application/json].

Я проверил HttpMessageConverters, которые у меня есть на моем restTemplate, и я нашел MappingJacksonHttpMessageConverter.Что-то еще требуется от меня в коде, чтобы использовать указанный конвертер?

Я нашел несколько примеров на форумах Spring.io, но они касались службы, которая требовала содержимого www / form, а не JSON.Удивительно, но я не нахожу каких-либо подробностей об использовании конкретного конвертера для Map для отправки в виде JSON.

Примечание: во фрагментах кода могут быть ошибки компиляции, я набрал код с мобильного телефона.Я не могу использовать Интернет на компьютере, на котором я пишу код, в целях безопасности.

1 Ответ

0 голосов
/ 18 февраля 2019

В сообщении об ошибке говорится, что не подходит HttpMessageConverter для типа запроса, поэтому просто добавьте MappingJackson2HttpMessageConverter с MediaType к RestTemplate

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); 
coverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON); 
restTemplate.getMessageConverters().add(0, converter)
...