私はSpring Data JPAを使用して、リポジトリインターフェースを使用していくつかの休憩サービスを作成しようとしています。しかし、私はカスタムコントローラを作成することなく何かをしようとしているつもりです。Spring Data JPAとPUTの作成リクエスト
このサービスは、PUTおよびGET要求のみを受け入れるとします。 PUT要求は、リソースの作成および更新に使用されます。したがってIDはクライアント側で生成されます。
エンティティとリポジトリはこのようなものになるだろう:
@Entity
public class Document {
@Id
private String name;
private String text;
//getters and setters
}
@RepositoryRestResource(collectionResourceRel = "documents", path = "documents")
public interface DocumentRepository extends PagingAndSortingRepository<Document, String> {
}
私はPUT要求する@ localhostのようにしよう:8080 /文書/ fooの以下のボディを持つ:
{
"text": "Lorem Ipsum dolor sit amet"
}
Iをこのメッセージが表示されます。
{
"timestamp": 1474930016665,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.orm.jpa.JpaSystemException",
"message": "ids for this class must be manually assigned before calling save(): hello.Document; nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): hello.Document",
"path": "/documents/foo"
}
だから私はボディに送信する必要があります:
{
"name": "foo",
"text": "Lorem Ipsum dolor sit amet"
}
ので、それは201が
{
"text": "Lorem Ipsum dolor sit amet",
"_links": {
"self": {
"href": "http://localhost:8080/documents/foo"
},
"document": {
"href": "http://localhost:8080/documents/foo"
}
}
}
で作成し返すことは、JSON本体の内部ID(名前フィールド)を送信することなく、PUTを作ることは可能ですか?私はすでにURIでそれを送信しているので?
RestControllerを作成して/documents/{document.name}でrequestmappingを作成し、保存する前に名前フィールドを設定することができますが、注釈などがあるかどうかを知りたかった。
ありがとう!私はHandleBeforeCreateの周りに何かを期待していたが、注入してURIを取得する方法を知らなかった:) –