Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧休息帽_Java_Spring_Rest_Spring Hateoas - Fatal编程技术网

Java 弹簧休息帽

Java 弹簧休息帽,java,spring,rest,spring-hateoas,Java,Spring,Rest,Spring Hateoas,我试图遵循最佳实践,想象一个带有/books端点的基本API 我上过以下课程: 书 BookRepository(分页和排序存储库,但未导出!!) BookController(这是服务类) BookResource(“代表性状态转移”中的书的“代表性”) 图书资源汇编程序 我的BookController如下所示: @RequestMapping(path="/{id}", method = RequestMethod.GET) public ResponseEntity<?&g

我试图遵循最佳实践,想象一个带有/books端点的基本API

我上过以下课程: 书 BookRepository(分页和排序存储库,但未导出!!) BookController(这是服务类) BookResource(“代表性状态转移”中的书的“代表性”) 图书资源汇编程序

我的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);
    }
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;
    }
}
我在哪里陈述?我应该添加哪些新类/函数来处理同一资源的v2

我找不到涵盖所有方面的好教程

我的第一个问题很容易解决,我想,题目不是 初始化,所以当我调用/books/1时,我得到title:null

您使用BookResource的方式不对。 我假设您的域对象(书)看起来像:

public class Book {
    public String title;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

}
BookResource是一个包装器,它向域对象添加链接,并以RESTful方式呈现它

public class BookResource extends Resource<Book> {

    public BookResource(Book content, Link... links) {
        super(content, links);
    }

}
在这种非常简单的情况下(对Book实例没有特殊处理),您甚至不需要这个端点,因为Spring为您生成了它

第二个也是更重要的问题是我如何进行内容协商 以及版本控制,这是RESTfulAPI的一个非常重要的方面。怎么 我应该介绍BookResourceV2吗?我应该在哪里协商

您需要定义一个
RepositoryRestController
,并使用
RequestMapping
注释的控制器端点的
products
参数,类似于我在本文中所解释的

public class BookResource extends Resource<Book> {

    public BookResource(Book content, Link... links) {
        super(content, links);
    }

}
@RequestMapping(path="/{id}", method = RequestMethod.GET)
public ResponseEntity getBook(@PathVariable Long id,
    PersistentEntityResourceAssembler assembler) {
    Book book = bookRepository.findOne(id);
    if (null == book) {
        throw new ResourceNotFoundException();
    }

    return ResponseEntity.ok(assembler.toResource(book));
}