0

我们在服务器端有一个带有 Oracle 11g 和 Apex 的休息 Web 服务。在客户端,我们正在为 android 开发,并使用 Spring 1.0.1 和 Jackson 2.2.3 库来管理其余 web 服务的请求并将 json 数据转换回 pojo。

当 web 服务是“查询”时,它工作得很好。resultset-Json 数据在 Pojos 数组中转换没有问题。但是,当我们尝试对 oracle 过程执行相同操作时,它会因异常而失败。

该过程返回的Json数据如下:

{"item":"{\r\n  \"user\" : \"{john}\",\r\n  \"profile\" : \"nothing\"\r\n}"}

我尝试了一个在线 Json 验证器,Json 数据似乎是有效的。在标题中,您还可以看到类型是“application/json”。

pojo对象如下:

   public class User {

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    private String user;

    public String getProfile() {
        return profile;
    }

    public void setProfile(String profile) {
        this.profile = profile;
    }

    private String profile;
}

调用 web 服务并尝试将 json 转换为 pojo 的代码如下(从 spring 示例中复制):

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
User users = restTemplate.getForObject(url, User.class);

最后,当它尝试执行“getForObject”时出现异常:

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [com.xxx.xxx] and content type [text/plain;charset=iso-8859-1]

我尝试对 Gson 库而不是 Jackson 库做同样的事情,同样的例外是 trow。现在我被封锁了几天...

有任何想法吗?我做错了什么?

提前致谢,

4

1 回答 1

1

问题在于您返回的 JSON 和您声明的类。您的 JSON 结构{"item":"{\r\n \"user\" : \"{john}\",\r\n \"profile\" : \"nothing\"\r\n}"}不会映射到 User 类。映射到用户类的 Json 结构是 {\r\n \"user\" : \"{john}\",\r\n \"profile\" : \"nothing\"\r\n}

因此,您将不得不更改 Rest Service 中的 JSON 响应。

或者像这样添加一个新的类结构

public class UserItem {
 User user;
 //the usual setter getter
}

然后休息电话将是这样的:

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
UserItem item = restTemplate.getForObject(url, UserItem .class);
User user = item.getUser();
于 2013-08-28T07:05:25.767 回答