Как отобразить произвольные запросы в SpringBoot? - PullRequest
0 голосов
/ 13 мая 2019

Мне нужно написать Spring RestController, который ловит URL-адреса, составленные из произвольного числа переменных.В частности, мне нужно отобразить что-то вроде /{id1}/{id2}/some/dynamic/path/ наряду с «нормальными» отображениями, такими как /{someid} и / или /./{id1}/{id2}/some/dynamic/path/ необходимо сопоставить трем параметрам id1, id2 и some/dynamic/path, где путь может быть любым от нуля до 10 сегментов.

Возможно, я что-то не так понял, но catchAll() Я реализовал для этого случая всегда ловит все - и игнорирует другие пути.Как мне решить эту проблему?

Вот мой код:

@RestController
@RequestMapping("/")
public class MyController
{
    @GetMapping("/")
    @ResponseBody
    public ResponseEntity staticPath()
    {
        return new ResponseEntity<String>("1", HttpStatus.OK);
    }

    @GetMapping("/{someid}")
    @ResponseBody
    public ResponseEntity pathWithOneVar(@PathVariable String someid)
    {
        return new ResponseEntity<String>("2", HttpStatus.OK);
    }

    @RequestMapping("{id1}/{id2}/**")
    @ResponseBody
    public ResponseEntity catchAll(@PathVariable String id1, @PathVariable String id2)
    {
        HttpServletRequest requestServlet = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
        requestServlet.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE));

        return new ResponseEntity<String>("3", HttpStatus.OK);
    }
}

Что мне нужно:

  • Карта / в staticPath ()
  • Отображение /42 на pathWithOneVar (): var someid = 42
  • Отображение /1/2 на catchAll (): var id1 = 1, var id2 = 2, var path = ""
  • Карта /1/2/a для catchAll (): var id1 = 1, var id2 = 2, var path = "a"
  • Map /1/2/a/b/c/d/e/f/g/h/i/j/k to catchAll (): var id1 = 1, var id2 = 2, var path = "a / b / c / d / e / f / g / h / i / j / k"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...