ドキュメント探しても、ググってもstack overflowを探しても明確に書かれていなかったっぽいので(本来的には hal の仕様を見るのが正しいかもしれない)
次のような二つのエンティティが存在するものとする。
@Entity class Book { @Id private Integer id; private String title; // getter/setter 省略 }
class Review { @Id private Integer id; @ManyToOne(optional = false) private Book book; private String text; private LocalDateTime created; // getter/setter 省略 }
この Review
クラスのレポジトリーを次のように作る
@Repository interface ReviewRepository extends PagingAndSortingRepository<Review, Integer> { @RestResource(path = "by_book") Page<Review> findByBookOrderByCreatedDesc(@Param("book") final Book book, final Pageable pageable); }
Spring Rest Repository で 関連するオブジェクトのレコードはオブジェクトそのものではなく、 link(URI) で表されるので、オブジェクトについても URI
で指定できる。したがって Review
リポジトリーを Book
で検索する(上記の findByBookOrderByCreatedDesc
を呼び出す)ためのリクエストは次のようになる(アプリケーションはポート8080、コンテキストパスは book-repo
とする)。
$ curl "http://localhost:8080/book-repo/reviews/search/by_book?book=http://localhost:8080/book-repo/books/2"