Spring REST получает URL-путь для нескольких сопоставленных конечных точек - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть конечная точка 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? Я не хочу ни дублировать эту конечную точку, ни передавать некоторые параметры. Я ищу какой-нибудь весенний код волхвов c.

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

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 - это объем сеанса .

Надеюсь, это поможет.

1 голос
/ 11 февраля 2020

Вы можете добавить ServerHttpRequest в качестве аргумента метода, а затем получить URI для текущего запроса, используя getURI(). Он должен работать как для Spring MVC, так и для Spring WebFlux.

Подробнее о методах обработки документация .

...