私はいくつかのコントローラでエンドポイントを自動的に作成しています(REST
)。カスタムレスポンスでSpringのRESTレスポンスが異なります
@RepositoryRestResource(collectionResourceRel = "books", path = "books")
public interface BooksRepository extends CrudRepository<Books, Integer> {
public Page<Books> findTopByNameOrderByFilenameDesc(String name);
}
私が訪問:http://localhost:8080/Books
私は戻って取得:
{
"_embedded": {
"Books": [{
"id": ,
"filename": "Test123",
"name": "test123",
"_links": {
"self": {
"href": "http://localhost:8080/books/123"
},
"Books": {
"href": "http://localhost:8080/books/123"
}
}
}]
},
"_links": {
"self": {
"href": "http://localhost:8080/books"
},
"profile": {
"href": "http://localhost:8080/profile/books"
},
"search": {
"href": "http://localhost:8080/books/search"
},
"page": {
"size": 20,
"totalElements": 81,
"totalPages": 5,
"number": 0
}
}
}
私は自分のコントローラを作成する場合:
@Controller
@RequestMapping(value = "/CustomBooks")
public class CustomBooksController {
@Autowired
public CustomBookService customBookService;
@RequestMapping("/search")
@ResponseBody
public Page<Book> search(@RequestParam(value = "q", required = false) String query,
@PageableDefault(page = 0, size = 20) Pageable pageable) {
return customBookService.findAll();
}
}
に見えることを、私は応答が返されます自動的に生成されたコントローラ応答のようなものはありません:
{
"content": [{
"filename": "Test123",
"name" : "test123"
}],
"totalPages": 5,
"totalElements": 81,
"size": 20,
"number": 0,
}
私の応答を自動的に生成された応答のように見えるようにするには、何が必要ですか?私は一貫性を保ちたいので、別の応答のためにコードを書き直す必要はありません。私はそれを別のやり方ですべきか?
編集:は、この発見: Enable HAL serialization in Spring Boot for custom controller method
をしかし、私は、私は有効にするために私のRESTコントローラーに変更する必要があるか理解していない:PersistentEntityResourceAssembler
。私はGoogleでPersistentEntityResourceAssembler
を検索しましたが、多くの例がなくても、同様のページに戻ることができます(またはその例は私にとってはうまくいきません)。
あなたは' @ResourceRestContro ller'? – chrylis
あなたの質問を正しく理解しているかどうかわかりませんが、あなたが探しているものはHATEOASです。https://spring.io/guides/gs/rest-hateoas/ – Markus
もう一度ページを返します。私はそれがタイプミスだと思いますか? –