java - 休息客户端异常 : Could not write request: no suitable HttpMessageConverter found for request type

标签 java json rest spring-mvc resttemplate

我正在尝试使用 RestTemplate 向 REST 服务发送 POST 请求,但出现以下错误

RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [xxx.query.XBrainQueryRequest] and and content type [application/json].

XBrainQueryRequest request = new XBrainQueryRequest();
// set query ID
request.setQueryId(XBrainTradequeryId);
request.setFlags(new String[]{"ALL_FIELDS"});
ObjectMapper objectMapper = new ObjectMapper();

logger.info("calling XBrainTradeQuery and  Input:{}",objectMapper.writeValueAsString(request));

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_JSON);

 try
       {
       restTemplate = new RestTemplate();

       ResponseEntity<XBrainTradeList> result=null;
       xBrainTradeList =null;

       ResponseEntity<XBrainTradeList> result1 = restTemplate.exchange(XBrainTradeQueryURL, HttpMethod.POST, new HttpEntity(request, headers), XBrainTradeList.class);

我的 XBrainQueryRequest 类如下所示

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class XBrainQueryRequest {

    private String queryId;
    private String[] flags;
    private String[] attributes;

    /**
     * @return the queryId
     */

    public String getQueryId() {
        return queryId;
    }

    public XBrainQueryRequest(String queryId, String[] flags, String[] attributes) {
        super();
        this.queryId = queryId;
        this.flags = flags;
        this.attributes = attributes;
    }

    public XBrainQueryRequest() {
    }

    public XBrainQueryRequest(String queryId, String[] flags) {
        super();
        this.queryId = queryId;
        this.flags = flags;
    }

    /**
     * @param queryId
     *            the queryId to set
     */
    public void setQueryId(String queryId) {
        this.queryId = queryId;
    }

    public String[] getFlags() {
        return flags;
    }

    public void setFlags(String[] flags) {
        this.flags = flags;
    }

    public String[] getAttributes() {
        return attributes;
    }

    public void setAttributes(String[] attributes) {
        this.attributes = attributes;
    }

}

有人能解释一下为什么我会出错以及如何解决它。我对这些东西很陌生。

最佳答案

已解决。将请求参数替换为 objectMapper.writeValueAsString(request)。请求值存在 JSON 格式问题。

旧代码

ResponseEntity<XBrainTradeList> result1 =
    restTemplate.exchange(
        XBrainTradeQueryURL,
        HttpMethod.POST,
        new HttpEntity(request, headers),
        XBrainTradeList.class);

新代码

ResponseEntity<String> rest= 
    restTemplate.exchange(
        XBrainTradeQueryURL,
        HttpMethod.POST, 
        new HttpEntity(objectMapper.writeValueAsString(request), headers), 
        String.class);

此外,我还采用了 String 格式的响应。

关于java - 休息客户端异常 : Could not write request: no suitable HttpMessageConverter found for request type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45501630/

相关文章:

java - Maven 配置文件属性不是 "overriding"

java - 如何在 hibernate 中对关联表进行排序?

javascript - 获取存储在 HTML 元素中的 JSON

用于 haskell 中 ECG/EEG 传感器数据的 RESTful 接口(interface)

angularjs - Passport 在调用 passport.authenticate ('facebook' 后,如何在不重定向用户的情况下获取 facebook 重定向 uri

java - FST 可以很好地(反)序列化为 JSON,但默认配置存在问题

java - 使用 gson 创建复杂的 json 对象

javascript - 如何在递归解析后正确显示 JSON 对象的结果?

node.js - 如何在 Mongoose 中将对象字段作为数组获取?

python - 使用队列或 REST Web 服务协调分布式 Python 进程