5

Jackson/JPAの組み合わせに関する質問

  1. 現在のアプリケーションに約 20 のエンティティがあり、POM に Jackson の依存関係を追加した場合、すべてのエンティティがデフォルトでJSONオブジェクトに変換する準備ができているということですか? 私はサンプルプロジェクトを見まし@JsonIgnoredJSON. もしそうなら、どうしてこうなるのか、そのようなメカニズムの背後にあるものは何ですか? JACKSONデフォルトで無視されるかどうかにかかわらず、Jacksonアノテーションを持たないエンティティをどのように処理しますか? 私はオンラインでリソースを探していましたが、あまり運がありません。

  2. 20 個のエンティティのうち 1 つだけを JSON オブジェクトにマップする必要がある場合、他の 19 個のエンティティすべてに @JsonIgnore を追加する必要があるということですか? Jacksonそうでない場合、作業するエンティティとどのように区別しますか?

ありがとう。

4

2 に答える 2

15

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アノテーションを使用します。型で使用される場合、基本的には「この型がどこで使用されてもかまわないので、シリアライズしない」という意味です。

于 2013-04-12T19:21:36.640 に答える
1

いいえ、すべてのクラスを追加する必要はありません。追加@JsonIgnoreしようとすると、そこに配置できないため、コンパイル エラーが発生します。Jackson は、与えられたオブジェクトに対してのみ機能します。これは魔法ではありません。

Jackson のドキュメントは、 githubのプロジェクト ページや codehaus Web サイトなど、オンラインで簡単に見つけることができます。

于 2013-04-12T18:12:22.007 に答える