18

いくつかのメソッドmambmcを持つ 1 つのオブジェクトAがあり、このオブジェクトはmambのみを持つインターフェイスBを実装します。

Bをシリアル化すると、json 応答としてmambのみが期待されますが、 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
 } 
4

2 に答える 2

8

次の 2 つのオプションがあります。

1)@JsonSerializeインターフェースに注釈を付けます(@ broc.seibの回答を参照)

2) またはシリアル化に特定のライターを使用する (Jackson 2.9.6 以降):

ObjectMapper mapper = new ObjectMapper();
String str = mapper.writerFor(Interf.class).writeValueAsString(interf);
于 2019-02-08T14:47:05.333 に答える