我正在编写一个客户端来使用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发送的任何细节.
注意:代码片段可能有编译错误,我已经从我的手机输入了代码.出于安全原因,我无法在我编码的机器上使用互联网.
解决方法:
错误消息说没有为请求类型找到合适的HttpMessageConverter,因此只需将带有MediaType的MappingJackson2HttpMessageConverter添加到RestTemplate
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
coverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON);
restTemplate.getMessageConverters().add(0, converter)