【问题标题】:Convert String with json to List将带有 json 的字符串转换为列表
【发布时间】:2020-06-05 15:22:16
【问题描述】:

我正在尝试将 JSON 字符串(必须是列表)转换为对象列表:

[   
    {
        "paramName":"Content-Type",
         "paramValue":"text/xml; charset\u003d\"utf-8\""
    }
]

这是我的 Service.class:

String jSONString = new Gson().toJson(systemParams);
ObjectMapper mapper = new ObjectMapper();
List<A> map = (List<A>) mapper.readValue(jSONString, A.class);

这是我的模型:

@Data
@AllArgsConstructor
    public class A {

        String paramName;
        String paramValue;
    }

但是我得到了异常:

无法反序列化 java.util.LinkedHashMap 的实例

所以我尝试了不同的方式:

A[] map = mapper.readValue(jSONString, A[].class);

我得到了:

InvalidDefinitionException:无法构造实例 com.model.A(没有创作者,默认 构造,存在):

更新:

我尝试将 Service.class 更改为:

List<A> map = mapper.readValue(jSONString, new TypeReference<List<A>>(){});

还是有异常:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 不能 构造com.model.A 的实例(无创作者, 像默认构造,存在):

于是我删除了@AllArgsConstructor注解,手动添加了Constructor:

   public A(String paramName, String paramValue) {}

还有一个例外:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 不能 构造com.model.A 的实例(没有创作者, 像默认构造,存在):

【问题讨论】:

  • @wowo 不,现在我有: InvalidDefinitionException: 无法构造 com.model.A 的实例(没有创建者,如默认构造,不存在)但我在 A.class 中使用 @Data 和 @AllArgsConstructor 注释跨度>

标签: java json objectmapper


【解决方案1】:

我认为问题写在错误中:尝试在必须反序列化的类上定义一个空的构造函数。 我还认为要序列化类(因此,从字节到类)你必须实现可序列化接口。

【讨论】:

  • 我添加了空的构造函数,它现在可以工作了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 2020-07-30
  • 2016-04-25
  • 2020-05-23
  • 1970-01-01
相关资源
最近更新 更多