Jackson と JPA は互いに何の関係もありません。Jackson は JSON 解析ライブラリであり、JPA は永続化フレームワークです。Jackson は、ほぼすべてのオブジェクトをシリアル化できます。唯一の 要件は、オブジェクトが何らかの認識可能なプロパティ ( Javabean タイプのプロパティ、または で注釈が付けられた裸のフィールド) を持っていることです。 ) コンストラクタ. したがって、たとえば、これは Jackson がシリアル化できるオブジェクトです。@JsonProperty
// Class with a single Javabean property, "name"
class Person {
private String name;
public String getName() { return name ; }
public String setName(String name) { this.name = name ; }
}
そして、ここに別のものがあります:
// Class with a single field annotated with @JsonProperty
class Account {
@JsonProperty("accountNumber")
private String accountNumber;
}
そして、ここにさらに別のものがあります:
@Entity
public class User {
@Id
private Long id;
@Basic
private String userName;
@Basic
@JsonIgnore
private String password;
@Basic
@JsonIgnore
private Address address;
// Constructors, getters, setters
}
最後の例は、JPA エンティティ クラスを示しています。Jackson に関する限り、他の型と同じようにシリアル化できます。ただし、そのフィールドに注意してください。このオブジェクトが JSON にシリアル化されると、「パスワード」と「アドレス」の 2 つのフィールドが含まれません。これは、注釈が付けられているため@JsonIgnore
です。この@JsonIgnore
注釈により、開発者は「このオブジェクトをシリアル化しても問題ありませんが、シリアル化するときはこれらのフィールドを出力に含めないでください」と言うことができます。この除外は、このオブジェクトのフィールドに対してのみ発生するため、たとえば、Address
フィールドを別のクラスに含めたが、そのフィールドを無視可能としてマークしなかった場合、そのフィールドはシリアル化されます。
コンテキストに関係なく、すべてのケースで型のシリアライズを防ぐには、@JsonIgnoreType
アノテーションを使用します。型で使用される場合、基本的には「この型がどこで使用されてもかまわないので、シリアライズしない」という意味です。