Spring启动请求映射

时间:2019-07-17 06:33:59

标签: spring spring-boot

我有以下请求参数。

a
b
c
d
e
f

请求可以包含所有参数或其中一些参数。我目前正在使用正则表达式/**来解决此问题。

有什么方法可以明确地提及请求映射而不是**并说它是可选的。而且任何顺序也应该匹配。

/a/1/b/f2

/b/f2/a/1

两者都应匹配该映射。

2 个答案:

答案 0 :(得分:1)

您可以通过添加所需的标志为false来使RequestParam为可选。

@RequestParam(value = "a", required=false)

对于PathVariables,我会尝试使用Optional类型,但我从未做过。

@PathVariable Optional<String> a for /path/{a}

答案 1 :(得分:1)

无法通过@PathVariable来实现。如果您想要随机顺序和路径变量数量的灵活性。您可以执行以下操作;

@GetMapping("/myEndpoint/**")
public void theEndpoint(HttpServletRequest request) {
    String requestURI = request.getRequestURI();
    Stream.of(requestURI.split("myEndpoint/")[1].split("/")).forEach(System.out::println);
}
  

您可以将.filter(StringUtils::isNotBlank)放在/myEndpoint/a///b/c

会给你

a
1
b
f2
d
x

致电/myEndpoint/a/1/b/f2/d/x

b
f2
1

致电/myEndpoint/b/f2/1


另外,请注意,您的端点需要一些锚点,例如/myEndpoint。否则,您的所有其他端点将与此端点冲突。

ps。最好将请求参数用于此类输入tbh,在此不确定您的要求,而仅是FYI。真正拥有这样一个hacky结构不是最好的……