使用AndroidAnnotations的Rest客户端 - “没有合适的HttpMessageConverter ......”

时间:2012-09-13 11:26:52

标签: android gson resttemplate android-annotations


我想向服务器发送POST请求。我必须将JSON对象作为参数传递,并将JSON作为响应,但我收到此错误:

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [com.package.Response] and content type [application/octet-stream]

代码

发送请求:

    @RestService
    RestClient restClient;
...
    String json = "{\"param\":3}"; 
    restClient.getRestTemplate().getMessageConverters().add(new GsonHttpMessageConverter());
    Response res = restClient.send(json);

RESTClient实现

@Rest("http://my-url.com")

    public interface RestClient
    {
        @Post("/something/")
        Response send(String json);

        RestTemplate getRestTemplate();

        void setRestTemplate(RestTemplate restTemplate);
    }

我正在使用这些JAR文件:

  • spring-android-rest-template-1.0.0.RC1
  • spring-android-core-1.0.0.RC1
  • 弹簧机器人-AUTH-1.0.0.RC1
  • GSON-2.2.2

我做错了什么?
当我将send参数更改为JSONObject时,我收到同样的错误。
顺便说一句。 AA文档真的很神秘 - 我还能使用Gson吗?
或者我应该使用杰克逊?
那么我需要包含哪个文件?

谢谢你的帮助!

3 个答案:

答案 0 :(得分:4)

您可以将RestTemplate与Gson或Jackson一起使用。

Gson很好,更容易使用你有小的json数据集。如果你有一个复杂/深的json树,杰克逊更合适,因为Gson创造了许多临时物体,导致世界的GC停止。

此处的错误表示无法找到能够解析HttpMessageConverter的{​​{1}}。

如果查看GsonHttpMessageConverter的来源,您会发现它只支持mimetype application/octet-stream

这意味着您有两种选择:

  • 从您的内容中返回application/json mimetype,这将非常合适
  • 或者只需更改application/json上支持的媒体类型:
GsonHttpMessageConverter

答案 1 :(得分:0)

我刚遇到这个问题。几个小时后,我意识到我传入RestTemplate.postForObject调用的类有Date变量。您需要确保它只包含简单的数据类型。希望这有助于其他人!

答案 2 :(得分:0)

我必须修改它才能工作:

final List<MediaType> list = new ArrayList<>();
list.addAll(converter.getSupportedMediaTypes());
list.add(MediaType.APPLICATION_OCTET_STREAM);
converter.setSupportedMediaTypes(list);