2017-01-16 60 views
1
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类型的任何对象序列化被引用对象标识serializaton /反序列化,它的值应该是object.key()。 反序列化,以应使用的值来查找实际的对象(BarBar2等)杰克逊:基于实现的接口

这怎么能与杰克逊做什么?

回答

0

您需要公共属性的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() { 
    } 
}