我正在尝试将请求映射到Spring控制器,但未按预期工作
当我尝试/ simple / test / something / .....时出现404错误。
我的映射如下@RequestMapping(path="/simple/test/{string1}/{string2}")
下面是我的代码
@RequestMapping(path = "/search/test/{string1}/{string2}", produces = APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public SearchResult search( @PathVariable String string1, @PathVariable Optional string2) {
if (!query.isPresent()) {
return service.getLastQueries(string1, string2);
}
}
当{string2}包含/或仅....时,我收到404错误。 例如{string2}是.......或某物
答案 0 :(得分:0)
仅将输入参数设置为Optional
还不够,您还应该在required=false
注释中设置@PathVariable
。
@PathVariable(required=false) Optional<String> string2
答案 1 :(得分:0)
正如@DDovzhenko指出的那样,您不能只声明Optional类型。实际上,您根本不应该这样做,因为u期望使用String并应坚持使用。与
结合使用required=false
@PathVariable的属性应该可以正常工作
@PathVariable(required=false) String urVariable
答案 2 :(得分:0)
感谢您的回复。
但是在我的情况下,第二个字符串有时应该是可选的。我将第二个字符串更改为“ RequestParam”,以便新的URL像这样/simple/test?q=something
新的请求映射将为@RequestMapping(path="/simple/test/{string1}")
所以解决方案代码是
@RequestMapping(path = "/search/test/{string1}", produces = APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public SearchResult search( @PathVariable String string1, @RequestParam Optional<String> string2) {
if (!string2.isPresent()) {
return service.getLastQueries(string1, string2);
}
}