我目前无法连接到Android上的web服务.我使用jackson-core/databind/annotation-2.2.4和Spring RESTWebService.如果我从浏览器访问URL,我可以看到JSON响应:(服务器返回List\Shop \看起来像:)
[{"name":"shopqwe","mobiles":[],"address":{"town":"city", "street":"streetqwe","streetNumber":"59","cordX":2.229997,"cordY":1.002539}, "shoe" [{"shoeName":"addidas","number":"631744030","producent":"nike","price":999.0, "sizes":[30.0,35.0,38.0]}]
从客户端端点(Android应用程序)我收到此错误消息:
08-26 17:43:07.406: E/AllShopsAsyc(28203): Could not read JSON: Can not deserialize instance of com.auginzynier.data.ShopContainer out of START_ARRAY token 08-26 17:43:07.406: E/AllShopsAsyc(28203): at [Source: com.android.okhttp.internal.http.HttpTransport$ChunkedInputStream@41efbd48; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.auginzynier.data.ShopContainer out of START_ARRAY token 08-26 17:43:07.406: E/AllShopsAsyc(28203): at [Source: com.android.okhttp.internal.http.HttpTransport$ChunkedInputStream@41efbd48; line: 1, column: 1] 08-26 17:43:07.406: E/AllShopsAsyc(28203): org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not deserialize instance of com.auginzynier.data.ShopContainer out of START_ARRAY token
我的服务器请求
RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); ShopContainer response = restTemplate.getForObject(url, ShopContainer.class);
ShopContainer的位置是:
public class ShopContainer { private Listshops;
商店,地址和鞋子的结构是:(我省略了getter和setter):
public class Shop { @JsonProperty("name") private String name; @JsonProperty("mobiles") private Listmobiles = new ArrayList (); @JsonProperty("address") private Address address; @JsonProperty("shoe") private List shoe = new ArrayList (); public class Address { @JsonProperty("town") private String town; @JsonProperty("street") private String street; @JsonProperty("streetNumber") private String streetNumber; @JsonProperty("cordX") private Double cordX; @JsonProperty("cordY") private Double cordY; public class Shoe { @JsonProperty("shoeName") private String shoeName; @JsonProperty("number") private String number; @JsonProperty("producent") private String producent; @JsonProperty("price") private Double price; @JsonProperty("sizes") private List sizes = new ArrayList ();
我看这里和谷歌,但仍然无法弄清楚我在这一点上缺少什么.
任何回应都会非常有帮助.
问候.
@UPDATE
我使用jackson的ObjectMapper和RequestMethod.GET修复了JSON.它现在返回一个String.
list is ListObjectMapper mapper = new ObjectMapper(); mapper.writeValue(new File("D:\\Android\\shop.json"), list); System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(list)); return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(list);
控制台中的JSON如下所示:
[ { "name" : "shopqwe", "mobiles" : [ ], "address" : { "town" : "city", "street" : "streetqwe", "streetNumber" : "59", "cordX" : 2.229997, "cordY" : 2.002539 }, "shoe" : [ { "shoeName" : "addidas", "number" : "631744033", "producent" : "nike", "price" : 10.0, "sizes" : [ 30.0, 35.0, 38.0 ] } ] } ]
请求仍然不起作用 - 错误是相同的.