Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring4.2中,如何使path变量成为可选变量 @RequestMapping(value=“/return/{name}”,method=RequestMethod.GET) public ResponseEntity ReturnName(HttpServletRequest请求,@PathVariable(名称)字符串inputName){ 返回新的ResponseEntity(inputName,HttpStatus.OK) }_Java_Spring - Fatal编程技术网

Java 在Spring4.2中,如何使path变量成为可选变量 @RequestMapping(value=“/return/{name}”,method=RequestMethod.GET) public ResponseEntity ReturnName(HttpServletRequest请求,@PathVariable(名称)字符串inputName){ 返回新的ResponseEntity(inputName,HttpStatus.OK) }

Java 在Spring4.2中,如何使path变量成为可选变量 @RequestMapping(value=“/return/{name}”,method=RequestMethod.GET) public ResponseEntity ReturnName(HttpServletRequest请求,@PathVariable(名称)字符串inputName){ 返回新的ResponseEntity(inputName,HttpStatus.OK) },java,spring,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) String inputName) {
    return new ResponseEntity<>(inputName, HttpStatus.OK)
}
@RequestMapping(value=“/return/{name}”,method=RequestMethod.GET)
public ResponseEntity ReturnName(HttpServletRequest请求,@PathVariable(名称)可选inputName){
返回新的响应属性(inputName.isPresent()?inputName.get():null,HttpStatus.OK)
}
但它并没有像预期的那样发挥作用

如果name的值未给定,则抛出405

例如:

返回/ram工作正常

return抛出405错误

我是否遗漏了什么

是否有任何spring属性来处理此问题


提前感谢。

您不能,只需创建另一个方法来捕获url中没有{name}的url

@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)
}

要使您自己提出的解决方案发挥作用并使用单一方法,您可以使用以下方法:

@RequestMapping(value="/return",method=RequestMethod.GET)
@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);
}
@RequestMapping(value={/return/{name},“/return”},method=RequestMethod.GET)
公共响应属性返回名称(HttpServletRequest请求,@PathVariable(“名称”)可选输入名称){
返回新的ResponseEntity(inputName.isPresent()?inputName.get():null,HttpStatus.OK);
}
最后还是有两个端点像Baldurian建议的那样。

试试这个:

@RequestMapping(value={/return/{name},“/return”},method=RequestMethod.GET)
公共响应属性返回名称(HttpServletRequest请求,@PathVariable(“名称”)可选输入名称){
返回新的ResponseEntity(inputName.isPresent()?inputName.get():null,HttpStatus.OK);
}
@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);
}