1

Dropwizard (Jackson と Hibernate を使用) を使用したブック ライブラリ システムには、次のクラスがあります。

@Entity
@Table(name="author")
public class Author {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name="name")
    private string name;
    // some more properties
}

@Entity
@Table(name="book")
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name="title")
    private string title;
    // some more properties
}

@POST
public void addBook(Book book) {
    ...
}

本を追加するには、本のタイトルと著者の ID を json オブジェクトとして送信する必要があります。

{"title": "Harry Potter", "author": "123"}

ただし、Jackson は指定された作成者 ID から作成者を取得できないようです。

Error 400 Can not instantiate value of type [simple type] from Integral number; no single-int-arg constructor/factory method (through reference chain)

次のような一時オブジェクトを作成せずに、リクエストの JSON から book オブジェクトへ、および authorId から著者へのマッピングを構成する方法はありますか

class TempBook { string title; long authorId; }
4

1 に答える 1

2

Book エンティティに「author」プロパティがありません。したがって、Jackson は実際の Book インスタンスとの間で JSON をマーシャリング/アンマーシャリングすることができません。私が考えることができる方法は、次のようなセッター/ゲッターヘルパーメソッドを使用することです:

@OneToOne private Author authorEntity;
public void setAuthor(String author) { this.autorEntity = new Author(author);}

ただし、マーシャリング プロセスに適切なゲッターを追加し@JsonIgnoreProperties、プロパティに注釈を使用することを検討する必要がありauthorEntityます。

お役に立てれば。

于 2014-05-27T04:23:23.443 に答える