【问题标题】:Spring REST get url path for multiple mapped endpointSpring REST获取多个映射端点的url路径
【发布时间】:2020-05-26 16:18:31
【问题描述】:

我有多个路径的 REST 端点,如下所示:

@RequestMapping(method = RequestMethod.POST, path = {"/xxx/yyy", "/zzz"})
@ResponseBody
public Mono<EpcPain> paymentOrder(@RequestHeader(name = "Timeout", defaultValue = "10000") int timeout,
                                  @RequestHeader(name = "X-Request-Id", required = false) String xRequestId) {
...
}

如果请求路径是 xxx/yyy 或 zzz,我该如何解决?我不想复制这个端点,也不想传递一些参数。我正在寻找一些弹簧代码魔法。

【问题讨论】:

  • 也许你可以试试这样的stackoverflow.com/a/37718400
  • answer 有帮助吗?
  • ServletUriComponentsBuilder.fromCurrentRequestUri().toUriString() 会给你 uri
  • Thnx R.G,但我不想因此添加新的依赖项。

标签: java spring rest spring-boot spring-mvc


【解决方案1】:

org.springframework.web.context.request.RequestContextHolder可以用来获取路径

import static org.springframework.web.servlet.HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE;
import static org.springframework.web.servlet.HandlerMapping.LOOKUP_PATH;
import static org.springframework.web.servlet.HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE;

   @RequestMapping(value = {"/getDetails","/getDetailsMore"}, method = RequestMethod.GET)
    public String getCustomerDetails(TestFormBean bean) {
        RequestAttributes reqAttributes = RequestContextHolder.currentRequestAttributes();
    System.out.println(reqAttributes.getAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE, 0));
    System.out.println(reqAttributes.getAttribute(LOOKUP_PATH, 0));
    System.out.println(reqAttributes.getAttribute(PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, 0));

        return "test";
    }}

所有三个都打印路径。

这里是0 - is request scope1 - is session scope

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以添加ServerHttpRequest 作为方法参数,然后使用getURI() 获取当前请求的URI。它应该适用于 Spring MVC 和 Spring WebFlux。

    查看处理程序方法documentation 了解详情。

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2022-10-13
      • 2017-06-07
      • 2020-09-16
      • 1970-01-01
      • 2019-12-08
      • 2013-03-30
      • 2023-03-18
      • 2014-03-08
      相关资源
      最近更新 更多