【问题标题】:HttpMessageConverter exception : RestClientException: Could not write request: no suitable HttpMessageConverter foundHttpMessageConverter 异常:RestClientException:无法写入请求:找不到合适的 HttpMessageConverter
【发布时间】:2019-02-12 18:30:51
【问题描述】:

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

我已经编写了一个客户端并且能够成功调用 RESTful 服务。事实上,如果我以字符串(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 发送的任何详细信息。

注意:代码 sn-ps 可能有编译错误,我是从手机输入代码。出于安全原因,我无法在我编码的机器上使用互联网。

【问题讨论】:

  • 你可以试试这个添加到RestTemplateMappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); coverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON); restTemplate.getMessageConverters().add(0, converter)
  • 您使用的是哪个版本的 spring?我可以看到它的错误
  • 成功了,谢谢@Deadpool!

标签: java json post hashmap resttemplate


【解决方案1】:

错误消息说没有找到适合请求类型的HttpMessageConverter,所以只需将MappingJackson2HttpMessageConverterMediaType 添加到RestTemplate

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多