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 中同一实体的多个存储库

使用 Spring Data REST 时如何更改 Jacksons 配置?

Spring Data REST不完全指南

Spring data REST:使用适当的 HTTP 方法更新资源的关联

HAL浏览器无法在spring-data-rest中正确自动配置

如何使用 Spring Data Rest 公开 resourceId