【发布时间】:2017-03-28 07:33:55
【问题描述】:
我正在尝试遵循最佳实践,想象一个带有 /books 端点的基本 API。
我有以下课程: 书 BookRepository(PagingAndSortingRepository 但未导出!!) BookController(这是服务类) BookResource(“代表状态转移”中的书的“代表”) BookResourceAssembler
我的 BookController 如下所示:
@RequestMapping(path="/{id}", method = RequestMethod.GET)
public ResponseEntity<?> getBook(@PathVariable Long id) {
Book book = bookRepository.findOne(id);
BookResource bookResource = this.bookResourceAssembler.toResource(book);
return ResponseEntity.ok(bookResource);
}
我的 BookResource 如下所示:
public class BookResource extends ResourceSupport{
public String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
BookResourceAssembler:
@Component
public class BookResourceAssembler extends ResourceAssemblerSupport<Book, BookResource> {
public BookResourceAssembler() {
super(BookController.class, BookResource.class);
}
@Override
public BookResource toResource(Book entity) {
BookResource resource = createResourceWithId(entity.getDbid(), entity);
return resource;
}
}
我想我的第一个问题很容易解决,标题没有初始化,所以当我调用 /books/1 时,我得到 title: null。
第二个也是更重要的问题是我如何进行内容协商和版本控制,这是 RESTful API 的一个非常重要的方面。我应该如何引入 BookResourceV2 以及我应该在哪里协商它?假设我想要
"Content-Type: application/vnd.company.book+json.v2"
我在哪里说明这一点?我应该添加哪些新类/函数来处理同一资源的 v2?
我找不到涵盖所有方面的好教程。
【问题讨论】:
标签: java spring rest spring-hateoas