HttpMessageConverter 异常:RestClientException:无法写入请求:找不到合适的 HttpMessageConverter
我正在编写一个客户端来使用 RESTful 服务.我需要以键值对的形式发送请求,他们建议我为此使用 Map.我调用的 RESTful 服务只会接受 JSON,而我的客户端将使用 Java.它实际上将成为现有企业 EJB 项目的一部分.
I am writing a client to consume a RESTful service. I am required to send the request in key, value pair, they suggested that I use a Map for this. The RESTful service that I am calling is only going to accept JSON and my client is going to be in Java. It is actually going to be part of an existing enterprise EJB project.
我已经编写了一个客户端并且能够成功调用 RESTful 服务.事实上,如果我以字符串(JSON 格式)发送请求,我什至会收到回复.但我想避免这种将 Map 转换为 JSON 格式字符串然后在 Request 中发送出去的手动工作.
I have written up a client and am able to call the RESTful service successfully. In fact, if I send the request in String (JSON format) then I even get a response back. But I would like to avoid this manual work of converting the Map into a JSON format string and then sending it out in Request.
我已将 Content-Type 设置为 application/json 并创建了一个包含 KeyValue 对的 Map.
I have set Content-Type as application/json and have created a Map which will contain the KeyValue pair.
来自客户端的代码片段:
Snippet of code from Client:
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)类:
Request (ModelReqVO) Class:
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.代码中还需要我使用上述转换器吗?
I checked the HttpMessageConverters that I have on my restTemplate and I did find MappingJacksonHttpMessageConverter. Is something else required of me in the code to use the said converter?
我在 Spring.io 论坛上找到了几个示例,但它们是关于需要 www/form 内容而不是 JSON 的服务.令人惊讶的是,我没有找到有关使用特定转换器将 Map 作为 JSON 发送的任何详细信息.
I found a couple of examples on Spring.io forums, but they were about a service which required www/form content and not JSON. I, surprisingly, do not find any details about using a particular converter for Map to be sent as a JSON.
注意:代码片段可能有编译错误,我是从手机上输入代码的.出于安全原因,我无法在我编码的机器上使用互联网.
Note: The code snippets might have compile errors, I have typed the code out from my mobile. I cannot use the internet on the machine that I code in for security reasons.
推荐答案
报错信息说没有找到适合请求类型的HttpMessageConverter
,所以只需在MappingJackson2HttpMessageConverter
>MediaType 到 RestTemplate
The error message says no suitable HttpMessageConverter
found for request type, so just add MappingJackson2HttpMessageConverter
with MediaType
to RestTemplate
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
coverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON);
restTemplate.getMessageConverters().add(0, converter)
相关文章