使用Spring 4.2,我如何将路径变量作为可选项

时间:2016-04-04 09:23:40

标签: java spring

@RequestMapping(value="/return/{name}",method=RequestMethod.GET)
public ResponseEntity<String> ReturnName(HttpServletRequest req,@PathVariable(name) String inputName) {
    return new ResponseEntity<>(inputName, HttpStatus.OK)
}

我找到了像

这样的解决方案
@RequestMapping(value="/return/{name}",method=RequestMethod.GET)
public ResponseEntity<String> ReturnName(HttpServletRequest req,@PathVariable(name) Optional<String> inputName) {
    return new ResponseEntity<>(inputName.isPresent() ? inputName.get() : null, HttpStatus.OK)
}

但它没有按预期工作。

如果没有给出name的值,则抛出405。

示例:

return / ram工作正常。

返回抛出405错误。

我是否遗漏了什么?

有没有弹簧属性来处理这个?

提前致谢。

3 个答案:

答案 0 :(得分:3)

您不能,只需创建另一种方法来捕获网址中没有{name}的网址。

@RequestMapping(value="/return",method=RequestMethod.GET)

答案 1 :(得分:3)

要使您自己建议的解决方案有效并使用单一方法,您可以这样使用:

@RequestMapping(value= {"/return/{name}", "/return"},method=RequestMethod.GET)
public ResponseEntity<String> ReturnName(HttpServletRequest req, @PathVariable("name") Optional<String> inputName) {
    return new ResponseEntity<>(inputName.isPresent() ? inputName.get() : null, HttpStatus.OK);
}

最终它仍然是像Baldurian提出的2个端点。

答案 2 :(得分:1)

试试这个:

@RequestMapping(value= {"/return/{name}", "/return"},method=RequestMethod.GET)
public ResponseEntity<String> ReturnName(HttpServletRequest req, @PathVariable("name") Optional<String> inputName) {
    return new ResponseEntity<>(inputName.isPresent() ? inputName.get() : null, HttpStatus.OK);
}