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

无法反序列化START_ARRAY令牌的models.PublisheDataList实例

赫连瀚
2023-03-14

我尝试使用jacksonapi解析json,并提供以下详细信息。但我错了。请查找以下代码和堆栈跟踪的详细信息。

JSON

[{"id":1001,"cyPerReffe":1200,"distPercentage":"0"},{"id":1002,"cyPerReffe":1000,"distPercentage":"10"},{"id":1003,"cyPerReffe":800,"distPercentage":"20"},{"id":1004,"cyPerReffe":750,"distPercentage":"10"},{"id":1005,"cyPerReffe":700,"distPercentage":"10"},{"id":1006,"cyPerReffe":650,"distPercentage":"10"},{"id":1007,"cyPerReffe":600,"distPercentage":"20"},{"id":1008,"cyPerReffe":300,"distPercentage":"5"},{"id":1009,"cyPerReffe":333,"distPercentage":"7"},{"id":1010,"cyPerReffe":"32","distPercentage":"8"}]

控制器类

ObjectMapper mapper = new ObjectMapper();   mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
PublisheDataList publisheDataList = mapper.convertValue(json, PublisheDataList.class);

下面这个类是我的bean类。PublisheData.java

private Long id;
private Long cyPerReffe;
private String distPercentage;
//    with setter and getters

发布数据列表.java

List<PublisheData> publisheDataList;
//with setter and getters

我收到以下错误。

java.lang.IllegalArgumentException: Can not deserialize instance of models.PublisheDataList out of START_ARRAY token
 at [Source: N/A; line: -1, column: -1]
        at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:2502)
        at org.codehaus.jackson.map.ObjectMapper.convertValue(ObjectMapper.java:2468)
        at controllers.RYSController.publishReferenceYield(RYSController.java:79)
        at Routes$$anonfun$routes$1$$anonfun$applyOrElse$22$$anonfun$apply$62.apply(routes_routing.scala:318)
        at Routes$$anonfun$routes$1$$anonfun$applyOrElse$22$$anonfun$apply$62.apply(routes_routing.scala:318)
        at play.core.Router$HandlerInvoker$$anon$6$$anon$2.invocation(Router.scala:175)
        at play.core.Router$Routes$$anon$1.invocation(Router.scala:355)
        at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:50)
        at play.GlobalSettings$1.call(GlobalSettings.java:63)
        at play.core.j.JavaAction$$anon$2.apply(JavaAction.scala:80)
        at play.core.j.JavaAction$$anon$2.apply(JavaAction.scala:79)
        at play.libs.F$Promise$PromiseActor.onReceive(F.java:425)
        at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:159)
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425)
        at akka.actor.ActorCell.invoke(ActorCell.scala:386)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230)
        at akka.dispatch.Mailbox.run(Mailbox.scala:212)
        at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:502)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of models.PublisheDataList out of START_ARRAY token
 at [Source: N/A; line: -1, column: -1]
        at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
        at org.codehaus.jackson.map.deser.StdDeserializationCenter code hereontext.mappingException(StdDeserializationContext.java:219)
        at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:212)
        at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromArray(BeanDeserializer.java:875)
        at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:597)
        at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2704)
        at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1315)
        at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:2498)
        ... 21 more

共有1个答案

蔚元明
2023-03-14

您不需要PublisheDataList中间类来反序列化为Collection,请尝试直接使用映射器反序列化

List<PublisheData> publisheDataList = mapper.convertValue(json, mapper.getTypeFactory().constructCollectionType(List.class, PublisheData.class));
 类似资料:
  • 我需要向网络服务发送帖子请求,但它在异常后返回。 实际服务器响应如下: 我根据以下内容发送请求 我的代码

  • 下面是POJO类: 主要功能如下:

  • 问题内容: 我正在尝试将json请求解析为模型。我不知道这段代码有什么问题。json的语法看起来正确,并且在Java模型上也有注释。我不知道为什么会出现如下错误: Java模型: 杰森代码: 问题答案: 您已声明为单个对象,但是将其作为JSON文档中多个对象的数组返回。 您的模型当前将parameters节点定义为一个对象: 这意味着您的模型对象需要一个如下所示的JSON文档: 但是在JSON文档

  • 我试图将我的json请求解析到我的模型。我不知道,这段代码有什么问题。json的语法看起来是正确的,Java模型上的注释也是正确的。我不知道为什么会出现这样的错误: 爪哇模型: json代码:

  • 我用的是Kotlin,Spring Boot,Jackson数据格式csv。不确定如何将csv的响应作为域对象列表返回。我有以下错误:无法反序列化超出起始\u数组令牌 我的代码如下:

  • 问题内容: 我正在使用来自外部合作伙伴的API。不幸的是,返回的响应似乎没有固定的结构。理想情况下,API合同意味着它不会被违反,但是这种情况一直在发生。 无论如何,所以发生的事情是JSON响应中的字段主要是一个地图,但有时却是一个列表。 例如,假设以下是我通常得到的响应: 但是在极少数情况下,我会得到列表,而不是地图或其他违反合同的情况。 例如: 我正在使用杰克逊将此响应映射到POJO。在某些情