gpt4 book ai didi

java - Jackson:基于实现接口(interface)的对象身份序列化/反序列化

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:31 25 4
gpt4 key购买 nike

interface Foo
public String key()

class Bar implements Foo
public int id;
public String name;
public Bar2 bar2; <--- bar2.key() should be used as json value
String key() { return name }

class Bar2 implements Foo
public int id;
public int name;
public Bar bar; <--- bar.key() should be used as json value
String key() { return name }

每当在序列化中引用Foo类型的任何对象时,它的值都应该是object.key()。对于反序列化,应该使用 to 的值来查找实际对象(BarBar2 等)

jackson 如何做到这一点?

最佳答案

您需要公共(public)属性的 getter 方法。将 Foo 更改为抽象类并在其中定义属性和 getter 方法。

public abstract class Foo implements Serializable{
public String name;
public Foo bar;

public Foo() {
}

public String getBar(){
return bar.name;
}

public void setBar(Foo bar) {
this.bar = bar;
}
}

class Bar extends Foo{
public int id;

public Bar() {
}

public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
Bar bar = new Bar();
Bar2 bar2 = new Bar2();
bar.id = 1; bar.name = "bar1";bar.setBar(bar2);
bar2.id = 2; bar2.name = "bar2"; bar2.setBar(bar);

System.out.println(mapper.writeValueAsString(bar));
}
}

public class Bar2 extends Foo {
public int id;

public Bar2() {
}
}

关于java - Jackson:基于实现接口(interface)的对象身份序列化/反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41671872/

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