gpt4 book ai didi

java - 使用 Spring Data Rest 为 Controller 和存储库提供相同的 url 映射

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:38 26 4
gpt4 key购买 nike

我正在使用 Spring Data Rest 来实现自动休息端点和 HATEOAS。当我访问 localhost:8080 时,我得到:

   {
"_links": {
"books": {
"href": "http://localhost:8080/books{?page,size,sort}",
"templated": true
},
"users": {
"href": "http://localhost:8080/users"
},
"customers": {
"href": "http://localhost:8080/customers"
},
"profile": {
"href": "http://localhost:8080/profile"
}
}
}

GET @ localhost:8080/books 给我:出现意外错误(类型=不允许的方法,状态=405)。
不支持请求方法“GET”

这是我的仓库:

    public interface BookRepository extends PagingAndSortingRepository<Book, Long> {
Optional<Book> findByIsbn(String isbn);
}

我的 Controller :

   @RestController
public class BookController {
private final BookService bookService;

@Autowired
public BookController(BookService bookService) {
this.bookService = bookService;
}

@PostMapping("/books")
@ResponseStatus(HttpStatus.CREATED)
public Book newToDo(@RequestBody BookDTO bookDTO) {
return bookService.addNewBook(bookDTO);
}

@PutMapping("/books/{id}")
public ResponseEntity<?> editToDo(@PathVariable("id") Long id, @RequestBody double newPrice) {
return new ResponseEntity<>(bookService.changePrice(id, newPrice), HttpStatus.OK);
}
}

没有该 Controller GET @ localhost:8080/books 工作得很好 - 存储库本身设置了这个端点,我可以搜索我的所有书籍。当我添加这些 POST 和 PUT 方法时,出现错误。有没有办法使用存储库进行 GET 请求@ localhost:8080/books 并使用普通 Controller 方法进行 POST @ localhost:8080/books ?

最佳答案

对于自定义端点的实现,请尝试使用 @RepositoryRestController,如果 @RestController 因为 Spring Data REST 使用与 Spring Web 不同的流程,并且 @RestController 注释可能根本不起作用并与 Spring Data REST 发生冲突。

您还可以添加@ExposesResourceFor注释来支持HATEOAS链接。

关于java - 使用 Spring Data Rest 为 Controller 和存储库提供相同的 url 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42637761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com