2014-01-13 136 views
0

我想解析json使用傑克遜api以下詳細信息。 但我得到錯誤。 請查看代碼和堆棧跟蹤的以下詳細信息。無法反序列化models.PublisheDataList的實例out of START_ARRAY令牌

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"}] 

Controller類

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 

PublisheDataList.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 

回答

9

你並不需要一個PublisheDataList中間類反序列化到一個集合,嘗試直接與反序列化映射纔剛剛所討論[這裏]

List<PublisheData> publisheDataList = mapper.convertValue(json, mapper.getTypeFactory().constructCollectionType(List.class, PublisheData.class)); 
+0

有用的提示(http://stackoverflow.com /問題/ 10719729 /罐對象未反序列化實例-的- - 外的開始陣列-令牌在彈簧-3-其餘部分) – Damilola

相關問題