Jackson Annotationsの基本的な使い方


Jackson Annotationsの基本的な使い方
一、属性の名前変更
public class Name {
  @JsonProperty("firstName")
  public String _first_name;
}

結果は次のとおりです.
{ "firstName" : "Bob" }

二、属性を無視する
public class Value {
  public int value1;
  @JsonIgnore 
  public int value2;
}

結果は次のとおりです.
{ "value1" : 42 }

①json文字列からpojoに逆シーケンス化する場合、json文字列の一部の属性を無視する場合は、次のように処理します.
@JsonIgnoreProperties({ "extra", "uselessValue" })
public class Value {
  public int value;
}

これにより、次のjson文字列をValueオブジェクトに逆シーケンス化できます.
{ "value" : 42, "extra" : "fluffy", "uselessValue" : -13 }

②逆シーケンス化時にpojoに存在しないすべての属性を無視するには、次のようにします.
@JsonIgnoreProperties(ignoreUnknown=true)
public class PojoWithAny {
  public int value;
}

三、属性タイプの指定
プロパティのタイプが望ましくない場合があります.たとえば、次のような場合があります.
  • が逆シーケンス化されたとき、宣言されたタイプは汎用タイプですが、どの具体的な実装クラスに対応すべきか知っています.
  • がシーケンス化されている場合、クラスのすべての属性は必要ありません.親の属性がほしいだけです.

  • これで処理できます.
    public class ValueContainer {
      //   Value  ,
      //  json ValueImpl  
      @JsonDeserialize(as=ValueImpl.class)
      public Value value;
    
      //  BasicType AdvancedType 
      //  BasicType 
      //( , AdvancedType )
    
      @JsonSerialize(as=BasicType.class)
      //   @JsonSerialize(typing=Typing.STATIC)
      public BasicType another;
    }

    四、コンストラクタまたは工場方法の使用
    ①Jacksonではデフォルトでは、インスタンスを作成するためにパラメータなしのデフォルトコンストラクタが使用されますが、他のコンストラクタまたは静的ファクトリメソッドを使用してインスタンスを作成することもできます.
    public class CtorPOJO {
       private final int _x, _y;
    
       @JsonCreator
       public CtorPOJO(@JsonProperty("x") int x, @JsonProperty("y") int y) {
          _x = x;
          _y = y;
       }
    }

    ②静的な工場法も同様です.しかし、もう一つの「依頼」と呼ばれる別の使い方があります.
    public class DelegatingPOJO {
       private final int _x, _y;
    
       @JsonCreator
       public DelegatingPOJO(Map<String,Object> delegate) {
          _x = (Integer) delegate.get("x");
          _y = (Integer) delegate.get("y");
       }
    }

    この使用法には1つのパラメータしかありません.@JsonProperty注釈は使用できません.
    五、属性自動検出の修正
    Jacksonのデフォルトの属性検出規則は次のとおりです.
  • すべてのpublicタイプのプロパティ
  • すべてのpublicタイプのgetメソッド
  • すべてのsetメソッド(メソッドの可視性にかかわらず)
  • デフォルトのルールが要件を満たしていない場合は、@JsonAutoDetect注記で変更できます.
    ①例えば、すべての属性を自動的に検出したい(その属性の可視性にかかわらず)
    @JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)
    public class POJOWithFields {
      private int value;
    }

    ②すべての方法をスキップしたい
    @JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)
    public class POJOWithNoMethod {
    
    }

    ③2つを合わせると属性不検出のみを検出する方法です(私はそのために公式文書を読みました)
     
    @JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY, getterVisibility=JsonAutoDetect.Visibility.NONE)
    public class POJOWithOnlyField {
    
    }

     
    基本的にはこれだけです.英語の原文はここを見てください:テキストアドレス.Jacksonはすべてここを注釈します:Jackson注釈大全.