【问题标题】:Changing of Spring Data REST base path doesn't involve custom controllersSpring Data REST 基本路径的更改不涉及自定义控制器
【发布时间】: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-mvc spring-data-rest


【解决方案1】:

要让您的自定义控制器知道配置的基本路径,您必须使用 @RepositoryRestController 而不是 @Controller 注释它们

【讨论】:

    【解决方案2】:

    还有一句话:

    如果您使用@RepositoryRestController 注解,请不要使用类级别的@RequestMapping 注解。

    否则你的控制器方法可能会被映射两次!

    首先由 RequestMappingHandlerMapping 不带 basePath,然后由 RepositoryRestHandlerAdapter 带 basePath

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 2016-02-07
      • 2019-08-03
      • 2015-12-07
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      相关资源
      最近更新 更多