gpt4 book ai didi

java - jackson 反序列化内部集合

转载 作者:行者123 更新时间:2023-11-29 04:10:41 25 4
gpt4 key购买 nike

我对内部集合的反序列化有疑问:假设有两个类:

// RootClass.java
package somepackage;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.util.ArrayList;
import java.util.List;

class RootClass {
public List getItems() {
return items;
}

public void setItems(List items) {
this.items = items;
}

@JsonSerialize(contentAs = Item.class)
List<Item> items = new ArrayList<>();
}

//Item.java
package somepackage;

class Item {
String name;

public Item() {
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Item(String cat) {
name = cat;
}
}

// main class
package somepackage;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;

public class SampleCase {
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
RootClass root = new RootClass();
root.items.add(new Item("cat"));
String json = mapper.writeValueAsString(root);
RootClass root2 = mapper.readValue(json, RootClass.class);
Item item = (Item) root2.items.get(0);
}
}

我得到一个异常(exception):

Exception in thread "main" java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class somepackage.Item (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; somepackage.Item is in unnamed module of loader 'app')

根据集合上的 javadoc @JsonSerialize(contentAs = Item.class) 会对我有所帮助,但不会。 问题是:我错过了什么?

如果不是关于这个注释,我怀疑有一个标准的方法来处理这个问题(我不想创建自定义反序列化器)。

大多数关于集合反序列化的问题都是关于根对象是集合本身的情况,但对我来说不是这种情况。

jackson 2.9.8Java 11.0.2 OpenJDK x64

最佳答案

您的代码的基本形式没有任何问题。你正在尝试做的事情会奏效。你的代码有问题,首先是它甚至无法编译,因为你在 Item 上调用了一个带有字符串的构造函数,但你没有定义这样的构造函数。您还需要 Jackson 可以使用的 getter。

这是您的代码的一个版本:

class RootClass {
List<Item> items = new ArrayList<>();
public List<Item> getItems() {
return items;
}
}

class Item {
String name;
Item() {}
Item(String name) {
this.name = name;
}
public String getName() {
return name;
}
}

public static void main(String[] argsx) throws IOException{

ObjectMapper mapper = new ObjectMapper();
RootClass root = new RootClass();
root.items.add(new Item("cat"));
RootClass root2 = null;
String json = mapper.writeValueAsString(root);
root2 = mapper.readValue(json, RootClass.class);
Item item = root2.items.get(0);
System.out.println(item.getName());
}

输出:

cat

关于java - jackson 反序列化内部集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55289000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com