java - MappingJackson2HttpMessageConverter 转换复杂对象的错误

标签 java android json spring jackson

对于来自客户的每个请求,我都有返回给客户的类响应,我的响应是:

public class Response<T>  extends Request{

    private ResponseType responseType;
    private String message;
    private ArrayList<T> result;
    private int activationCode;
    .
    .
    .
}

在我的服务器端,我有返回响应的方法,该响应包含带有 InstagramUser

数组列表的结果

我的方法:

public Response getUserByUserName(@RequestBody List<Request> requests){
        .
    .
    .
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        try {
            String searchResponse = restTemplate.getForObject(uri, String.class);
            JSONObject rawObject = new JSONObject(searchResponse);
            JSONArray searchResults = rawObject.getJSONArray("data");
            ArrayList<InstagramUser> users = new ArrayList<InstagramUser>();
            for (int i = 0; i < searchResults.length(); i++) {
                JSONObject result = searchResults.getJSONObject(i);
                users.add(new InstagramUser(result, AccessToken.getTokenString()));
            }
            response = new Response(requests.get(0).getUserId(), ResponseType.success, "users find successfully on: " + new Date().toString());
            response.setResult(users);
        .
            .
            .
        return response;
    }

和我的Instagram用户:

public class InstagramUser extends InstagramModel {

    protected long id;
    protected String userName;
    protected String fullName;
    protected String profilePictureURI;
    protected String bio;
    protected String website;
    protected int mediaCount = -1;
    protected int followerCount = -1;
    protected int followingCount = -1;

    ...

}

但是在客户端,当我从服务器获得响应时,我的结果是 LinkedHashMap 的 ArrayList 代替了 InstagramUser 的 ArrayList:

restTemplate.postForObject(URL + conditions, params,Response.class);

这是我从服务器调用此方法的 json 响应:

    {
  "id": 6151638910251304448,
  "userId": 2,
  "instagramId": null,
  "searchId": null,
  "mediaId": null,
  "phoneNumber": null,
  "name": null,
  "date": 1466665008687,
  "responseType": "success",
  "message": "users find successfully on: Thu Jun 23 11:26:48 IRDT 2016",
  "result": [
    {
      "id": 110000004535,
      "userName": "______etabdar",
      "fullName": "________dar",
      "profilePictureURI": "https://igcdn-photos-h-a.akamaihd.net/hphotos-ak-xap1/t51.2885-19/s150x150/13183XXXXXXXX0231_1584363729_a.jpg",
      "bio": "🎓 XXXXX 90",
      "website": "",
      "mediaCount": -1,
      "followerCount": -1,
      "followingCount": -1
    }
  ],
  "activationCode": 0
}

我该如何解决这个问题?

最佳答案

您必须使用参数化类型引用。仅适用于其余模板交换方法。

List<YourObjectType>> res = template.exchange(
    rootUrl,
    HttpMethod.POST,
    null,
    new ParameterizedTypeReference<List<YourObjectType>>() {});

根据您的输入调整参数。

关于java - MappingJackson2HttpMessageConverter 转换复杂对象的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37984925/

相关文章:

android - ScrollView 内的 ListView 的滚动问题

java - new ClassPathXmlApplicationContext() 创建新的 bean 集

android - 将项目动态添加到 recyclerview

android - jQuery Mobile 中断 Phonegap 设备就绪事件

javascript - ruby rails : Get json from controller in Javascript file

java - Jackson 无法解析 ISO8601

javascript - 如何通过javascript访问选中的单选框的值

java - 从生成的jaxb类中的抽象Java类实现抽象方法(继承)

java - 跳过 Spring 占位符替换

java - 如何在另一台计算机上安装.jar依赖项?