尝试使用Spring REST时出现问题

时间:2014-08-04 19:24:07

标签: java spring rest jackson

我已经有一个REST服务正在运行,它返回下面的示例JSON:

{
   "_embedded" : {
     "artist" : [ {
       "name" : "+44",
       "genre" : "Rock",
       "country" : "USA",
       "id" : 469,
       "_links" : {
         "self" : {
           "href" : <ADDRESS>
         },
         "albumList" : {
           "href" : <ADDRESS>
         }
       }
     } ]
   }
}

我尝试使用RestTemplate来使用此资源,如下例所示

public static void main(String args[]) {
    RestTemplate restTemplate = new RestTemplate();
    Artist[] artistList = restTemplate.getForObject("http://localhost:8080/artists/search/findByName?name=+44", Artist[].class);
    for (Artist a : artistList)
        System.out.println(a.toString());
    }
}

当debbuger命中getForObject行时,会出现此错误:

Exception in thread "main" org.springframework.http.converter.HttpMessageNotReadableException:
Could not read JSON: Can not deserialize instance of br.com.lagranzotto.itunes.frontend.entity.Artist[] out of START_OBJECT token

我已经在互联网上广泛搜索了大约一个星期,没有成功找到这个例外的原因。

1 个答案:

答案 0 :(得分:1)

您似乎在Web服务中使用了Spring Data PagedResources,因此返回的Artist数据列表被封装在JSON中的_embedded属性中。所以RestTemplate并不知道如何反序列化。

查看Why does RestTemplate not bind response representation to PagedResources?并查看Oliver Gierke的回复。