首页 > 解决方案 > Spring REST获取多个映射端点的url路径

问题描述

我有多个路径的 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,我该如何解决?我不想复制这个端点,也不想传递一些参数。我正在寻找一些弹簧代码魔术。

标签: javaspringrestspring-bootspring-mvc

解决方案


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 - 是请求范围1 - 是会话范围

希望这可以帮助。


推荐阅读