Spring Data REST 基本路径的更改不涉及自定义控制器
Posted
技术标签:
【中文标题】Spring Data REST 基本路径的更改不涉及自定义控制器【英文标题】:Changing of Spring Data REST base path doesn't involve custom controllers 【发布时间】:2017-09-18 11:51:33 【问题描述】:我有 Spring Boot 应用程序和以下控制器
@Controller
@RequestMapping("/orders/id")
@ExposesResourceFor(Payment.class)
@RequiredArgsConstructor
public class PaymentController
...
当我改变时
spring.data.rest.base-path=/api
然后控制器响应没有 /api 基本路径的请求
curl -i -X PUT -H "Content-Type:application/json" -d " \"number\": \"1234123412341234\" " http://localhost:8080/orders/1/payment
即不是http://localhost:8080/api/orders/1/payment
如果我想要 /api 基本路径,这意味着将控制器映射更新为 @RequestMapping("/api/orders/id")
,这是不可取的,因为我将配置硬编码到代码中。
这个问题有什么解决办法吗? 谢谢
【问题讨论】:
该属性适用于 Spring Data Rest 控制器。你的控制器是一个标准的 Spring MVC 控制器。请参阅此处进行进一步讨论:***.com/questions/32927937/… 【参考方案1】:要让您的自定义控制器知道配置的基本路径,您必须使用 @RepositoryRestController
而不是 @Controller
注释它们
【讨论】:
【参考方案2】:还有一句话:
如果您使用@RepositoryRestController 注解,请不要使用类级别的@RequestMapping 注解。
否则你的控制器方法可能会被映射两次!
首先由 RequestMappingHandlerMapping 不带 basePath,然后由 RepositoryRestHandlerAdapter 带 basePath
【讨论】:
以上是关于Spring Data REST 基本路径的更改不涉及自定义控制器的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Data REST 时如何更改 Jacksons 配置?
Spring data REST:使用适当的 HTTP 方法更新资源的关联