当前位置: 首页 > 知识库问答 >
问题:

在Spring Webservice中,无法反序列化START_ARRAY标记之外的对象实例

姜明贤
2023-03-14
[{"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]}]
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);
public class ShopContainer {
   private List<Shop> shops;

商店、地址和鞋的结构是:(我省略了getters和setters):

public class Shop {
@JsonProperty("name")    private String name;
@JsonProperty("mobiles")   private List<String> mobiles = new ArrayList<String>();
@JsonProperty("address")   private Address address;
@JsonProperty("shoe") private List<Shoe> shoe = new ArrayList<Shoe>();

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<Double> sizes = new ArrayList<Double>();

我已经在这里和谷歌上看过了,但仍然不知道我在这一点上错过了什么。

任何回应都将大有帮助。

list is List<Shop>

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("D:\\Android\\shop.json"), list);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(list));
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(list);
[ {
  "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 ]
  } ]
} ]

共有1个答案

东方灵均
2023-03-14

您的json包含一个数组,但您试图将其解析为一个对象。发生此错误是因为对象必须以{开头。

您有两种选择:

>

  • 可以去掉ShopContainer类,而使用shop[]

    ShopContainer response  = restTemplate.getForObject(
        url, ShopContainer.class);
    
    Shop[] response  = restTemplate.getForObject(url, Shop[].class);
    
    return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(list);
    
    return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(
        new ShopContainer(list));
    

  •  类似资料:
    • 当我试图解析以前用Jackson生成的一些JSON时,我得到了这个错误。我像这样生成JSON 其中Message.getPayload()是一个HashMap,在这个实例中包含两个字符串和一个各种对象的列表。这将创建以下格式错误的JSON

    • 我有一个高度嵌套的api响应: 我试图通过使用许多包装来解析它。因为当我想获得带令牌的字段'value'时,它只从一个dataRequest dto返回'null'。 元素DTO: 属性DTO: 然后我试着用不是最好的方式解析这棵树,但是我无法理解如何更容易地解析它?并获取上面的异常: 试图通过将JsonIgnoreProperties更改为 在valuesDto中,但最终具有相同的异常

    • 我正在试用Spring中的RestTemplate。我试图读入这个JSON数据:JSON数据。数据是一个键值对,其中键是“GeoNames”,值是“GeoName”对象数组。 我有一个Geoname类来处理输入。这个类中还有getter和setter。然后,我有一个应用程序类,它只运行一个main方法来调用一个RestTemplate对象: 编辑 好了,我现在有了这个新类,它现在对JSON数据发出

    • 下面提到的是JSON字符串ResultString: 我想将相同的内容转换为A类的对象: B类代码为: 但是获取异常: JSONMappingException:无法从START_ARRAY标记反序列化java.util.LinkedHashMap实例

    • 我正在利用Spring提供的这个很酷的东西:Spring RESTWebService(Spring的版本是3)。如果我从浏览器访问URL,我可以看到JSON响应,但是从客户端endpoint(Android应用程序)III收到这个错误消息: MyObject结构与服务器端应用程序的结构相同。

    • 但是我得到了这个错误: “无法读取文档:无法反序列化com.advice.domain.family.income实例,从[source:java.io.pushbackInputStream@3d3298f9;行:1,列:2]处的START_ARRAY令牌中取出(通过引用链:java.util.ArrayList[0]);嵌套异常是com.fasterxml.jackson.databind.j