gpt4 book ai didi

java - Spring Boot 中单个资源使用 @RepositoryRestController 和 @RepositoryRestResource 的冲突

转载 作者:行者123 更新时间:2023-12-01 19:58:01 29 4
gpt4 key购买 nike

我的 Spring Boot 应用程序中有一个 Payment 实体。考虑到所有可能的 CRUD 操作,我使用 Spring Data Rest 进行读取,并希望实现自定义的创建操作。此外,此实体不允许删除更新

所以这是我想要的 URL 和每个 URL 的责任组件:

获取/付款:PaymentRepository

GET/payments/{id}:PaymentRepository

POST/付款:PaymentController

这是我的存储库:

@RepositoryRestResource
public interface PaymentRepository extends PagingAndSortingRepository<Payment, Long> {

// disable create and update
@Override
@RestResource(exported = false)
Payment save(Payment entity);

// disable delete
@Override
@RestResource(exported = false)
void delete(Payment entity);
}

这是我的 Controller :

@RepositoryRestController
@RequestMapping("/payments")
public class PaymentController {

@PostMapping("")
@ResponseBody
public Payment create() {
// some code...
}

}

如果我将 create 操作映射到 POST/payments/create 这样的网址,一切正常,但如果我使用上面的代码并映射 createPOST/paymentsGET/payments 网址不再起作用,并且我收到 405 Method Not Allowed 错误。 (GET/payments/{id} 仍在工作)

在这种情况下,似乎存在 @PostMapping("") 注释,导致 PaymentController 响应 GET/payments 请求并它失败了。

我希望我的解释很清楚。我该如何解决这个问题?

最佳答案

Spring Data REST reference指出:

Sometimes you may want to write a custom handler for a specific resource. To take advantage of Spring Data REST’s settings, message converters, exception handling, and more, use the @RepositoryRestController annotation instead of a standard Spring MVC @Controller or @RestController.

没有明确提及,但用 @RepositoryRestController 注释你的 Controller 还允许您为一个端点定义自定义行为,同时保留 Spring 自动生成的所有其他端点...在一种情况下:@RequestMapping注释只能在method level处使用(这实际上是引用文档示例中所做的)。

你的例子变成:

@RepositoryRestController
public class PaymentController {

@PostMapping("/payments")
@ResponseBody
public Payment create() {
// some code...
}

}

这样,您就可以将自定义端点映射到 POST /payments请求,加上 Spring 自动生成的所有端点,减去 @RestResource(exported = false) 注释的端点.

关于java - Spring Boot 中单个资源使用 @RepositoryRestController 和 @RepositoryRestResource 的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48815581/

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