HttpMessageConverter异常:RestClientException:无法写入请求:未找到合适的HttpMessageConverter

时间:2019-02-12 18:30:52

标签: java json post hashmap resttemplate

我正在编写一个使用RESTful服务的客户端。我需要在键,值对中发送请求,他们建议我为此使用Map。我正在调用的RESTful服务将仅接受JSON,而我的客户端将使用Java。它实际上将成为现有企业EJB项目的一部分。

我已经编写了一个客户端,并且能够成功调用RESTful服务。实际上,如果我以String(JSON格式)发送请求,那么我什至会得到响应。但是,我想避免将Map转换为JSON格式的字符串然后在Request中发送出去的手动工作。

我已将Content-Type设置为application / json,并创建了一个包含KeyValue对的Map。

来自客户端的代码段:

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].

我检查了restTemplate上的HttpMessageConverters,并找到了MappingJacksonHttpMessageConverter。使用该转换器的代码中还需要我做些其他事情吗?

我在Spring.io论坛上找到了几个示例,但是它们与需要www / form内容而不是JSON的服务有关。令人惊讶的是,我找不到有关使用特定转换器将Map作为JSON发送的任何详细信息。

注意:代码段可能存在编译错误,我已经从手机中键入了代码。出于安全原因,我无法在我编写代码的机器上使用互联网。

1 个答案:

答案 0 :(得分:1)

错误消息表明找不到适合请求类型的HttpMessageConverter,因此只需将MappingJackson2HttpMessageConverterMediaType添加到RestTemplate

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