我有以下请求参数。
a
b
c
d
e
f
请求可以包含所有参数或其中一些参数。我目前正在使用正则表达式/**
来解决此问题。
有什么方法可以明确地提及请求映射而不是**
并说它是可选的。而且任何顺序也应该匹配。
/a/1/b/f2
和
/b/f2/a/1
两者都应匹配该映射。
答案 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结构不是最好的……