2013-09-06 11 views
6

私はいくつかの方法ミリアンペアメガバイトMCと一つのオブジェクトを有し、このオブジェクトは、ミリアンペアメガバイトとインターフェースBを実現します。私はBをシリアル化するときジャクソンシリアライズのみインターフェースメソッド

私は、JSONレスポンスとしてのみミリアンペアメガバイトを期待するが、私は同様にMCを取得します。

この動作を自動化して、すべてのクラスをシリアル化するようにしたいのですが、インターフェイスに基づいて実装されているわけではありません。

どうすればよいですか?

例:

public interface Interf { 
    public boolean isNo(); 

    public int getCountI(); 

    public long getLonGuis(); 
} 

実装:

public class Impl implements Interf { 

    private final String patata = "Patata"; 

    private final Integer count = 231321; 

    private final Boolean yes = true; 

    private final boolean no = false; 

    private final int countI = 23; 

    private final long lonGuis = 4324523423423423432L; 

    public String getPatata() { 
     return patata; 
    } 


    public Integer getCount() { 
     return count; 
    } 


    public Boolean getYes() { 
     return yes; 
    } 


    public boolean isNo() { 
     return no; 
    } 


    public int getCountI() { 
     return countI; 
    } 

    public long getLonGuis() { 
     return lonGuis; 
    } 

} 

シリアライズ:

ObjectMapper mapper = new ObjectMapper(); 

    Interf interf = new Impl(); 
    String str = mapper.writeValueAsString(interf); 

    System.out.println(str); 

応答:

{ 
    "patata": "Patata", 
    "count": 231321, 
    "yes": true, 
    "no": false, 
    "countI": 23, 
    "lonGuis": 4324523423423423500 
} 

予想される応答:

{ 
    "no": false, 
    "countI": 23, 
    "lonGuis": 4324523423423423500 
} 
+0

同様の問題:[http://stackoverflow.com/questions/8922309/serialize-class-based-on-one-interface-it-implements-with-jackson-or-gson][1] [1]:http://stackoverflow.com/questions/8922309/serialize-class-based-on-one-interface-it-implements-with-jackson-or-gson – Farid

答えて

7

ただ、ジャクソンは基礎となるオブジェクトのクラスのインターフェイスのクラスにしていない応じてデータフィールドを構築することをお使いのインタフェースは、このような注釈を付けます。

@JsonSerialize(as=Interf.class) 
public interface Interf { 
    public boolean isNo(); 
    public int getCountI(); 
    public long getLonGuis(); 
} 
+0

私は複数持っている場合はどう私のimplクラスのためのインターフェイスと私はインターフェイスで定義されているgettersごとにオブジェクトをシリアル化したい。 – varun

+0

私は別のサービスから異なるインターフェースを返したいと思います。 – varun

+0

@varun異なるデータ構造を返すには、おそらく異なるエンドポイントを設定するべきです。つまり、getFoo()はFooインターフェースを返し、getBar()はBarインターフェースを返します.FooとBarは同じ基礎となるimplクラスを持ちます。 –

関連する問題