【问题标题】:spring jackson Map Deserialization春天杰克逊地图反序列化
【发布时间】:2020-02-10 13:23:53
【问题描述】:

我正在通过 Spring 控制器传递一个如下所示的 json 对象:

{
  "dataset":"myDataset",
  "typeProperties":[
    "myProperty"
  ],
  "stopWords":{
    "de":[ "daß","allem","dem"],
    "fr":["salut"]
  }
}

对应的java对象是:

public class DatasetConfigRequest {
    String dataset = "";
    List<String> typeProperties;
    HashMap<String,ArrayList<String>> stopWords = new HashMap<String,ArrayList<String>>();

//getter and setters

但是当我通过它时,我收到以下错误:

JSON parse error: Cannot deserialize instance of `java.util.HashMap<java.lang.Object,java.lang.Object>` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.HashMap<java.lang.Object,java.lang.Object>` out of START_ARRAY token
 at [Source: (PushbackInputStream); line: 1, column: 104] (through reference chain: eu.qanswer.core2.server.controller.payload.dataset.DatasetConfigRequest["stopWords"])]

我知道问题在于具有 ArrayList 值的 HashMap。但是如何解决呢?

谢谢 D063520

【问题讨论】:

  • 更清楚地创建一个类来保存@M.Çıklabakkal 所说的stopWords 值,因此您可以更好地控制来自客户端的内容。

标签: java spring jackson deserialization


【解决方案1】:

创建新类并将其命名为 stopWords 添加 id 和列表字段,最后将字段添加到数据集类名称为 stopWords

【讨论】:

  • 嗨!如果我按照您所说的那样创建一个新课程,那么 id="de" 和 list=["daß","allem","dem"]。但是然后把“fr”放在哪里。你的意思是我应该在 DatasetConfigRequest 类中放置一个 stopWords 类的列表?
  • 您应该将“stopWords”定义为数据集类中的一个数组,而不是添加多个停用词对象。
猜你喜欢
  • 2012-01-11
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多