我正在编写一个使用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发送的任何详细信息。
注意:代码段可能存在编译错误,我已经从手机中键入了代码。出于安全原因,我无法在我编写代码的机器上使用互联网。
答案 0 :(得分:1)
错误消息表明找不到适合请求类型的HttpMessageConverter
,因此只需将MappingJackson2HttpMessageConverter
和MediaType
添加到RestTemplate
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
coverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON);
restTemplate.getMessageConverters().add(0, converter)