5

除外情報を含む JSONView アノテーションを使用する方が適切と思われるユースケースがあります。次に例を示します。

@JSONView(Views.Report1.class, include=false)

これは、Jackson (1.9.2) で直接サポートされていない (属性を含む) ため、Jackson でこれを達成するための簡単な回避策があるのではないかと考えています。

使用事例:

  • Report1 : このビューにはid, name, info1, info2, info3, info4属性が必要です
  • Report2 : このビューにはid, name, info1, info2, info4属性が必要です
  • Report[3 ..] 他の多くのビューが可能であると言う
プライベート int id;
  プライベート文字列名;
  プライベート文字列 info1;
  プライベート文字列 info2;
  //view=report2 の場合は無視
  @JsonView(ReportViews.Report2.class , include=false)
  プライベート文字列 info3;
  プライベート文字列 info4;

私のユースケースは、ビューに基づいて属性を除外することです(またはレポートIDと言います)。JSONView アプローチでは、Report2 を除くすべてのビューを info3 属性に追加して除外する必要があります。うまくフィットしません。

このシナリオで正しいアプローチは何ですか? JSONView をカスタマイズして、除外/包含を除いて、同様のものが既に利用可能でない場合は、適切なソリューションになります。

4

2 に答える 2

2

その方法で特定のビューからフィールドを除外する方法はないようです。

ただし、インターフェイスを使用して必要な要素からビューを構成することにより、ビューを非常に柔軟に構成できます。

上記の場合、私はこれを試します:

public class ReportViews {
    public interface NeedsInfo3 {};

    public static class Report1 implements NeedsInfo3 {};
    public static class Report2 {};
}

次に、モデルでフィールド固有のビューを使用します。

private int id;
private String name;
private String info1;
private String info2;

@JsonView(ReportViews.NeedsInfo3.class)
private String info3;
private String info4;
于 2013-05-31T05:23:54.500 に答える
1

Jackson の JSON ビュー機能は、包含基準に基づいているため、既存の注釈を変更することはできません。

于 2012-12-05T01:20:12.943 に答える