@PathVariable(" ownerId")之间的区别StringOwner和@PathVariable String theOwner

时间:2017-08-23 06:55:58

标签: java spring spring-mvc path-variables

@PathVariable("ownerId") String theOwner中的@PathVariable String theOwnerSpring MVC之间是否存在任何差异。

我已经完成了Spring @PathVariable,但我并不清楚这个概念。

我通过分析uri parameter是否与variable name具有相同的名称找到了一个区别,然后您可以直接将其存储在变量中。这是正确的还是您可以发布与此相关的任何其他信息。

@GetMapping("/owners/{ownerId}")
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
// implementation omitted
}

@GetMapping("/owners/{ownerId}")
public String findOwner(@PathVariable String ownerId, Model model) {
// implementation omitted
}

3 个答案:

答案 0 :(得分:3)

唯一的区别是第一个选项允许您更改方法中的参数名称,您可以使用theOwner而不是ownerId

如果您有一个具有相同名称ownerId

的类成员,这可能很有用

答案 1 :(得分:2)

Spring MVC documentation非常明确它的工作原理:

  

要处理@PathVariable注释,Spring MVC需要按名称查找匹配的URI模板变量。您可以在注释中指定它:

@GetMapping("/owners/{ownerId}")
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
    // implementation omitted
}
     

或者,如果URI模板变量名称与方法参数名称匹配,则可以省略该详细信息。只要您的代码使用调试信息或Java 8上的-parameters编译器标志进行编译,Spring MVC就会将方法参数名称与URI模板变量名称匹配:

@GetMapping("/owners/{ownerId}")
public String findOwner(@PathVariable String ownerId, Model model) {
    // implementation omitted
}

答案 2 :(得分:1)

从您提到的文档页面:

  

URI模板" / owners / {ownerId}"指定变量名称`ownerId。当控制器处理此请求时,ownerId的值将设置为URI的相应部分中找到的值。例如,当/ owner / fred的请求进入时,ownerId的值为fred。

因此,如果您不想指定@PathVariable的值,请使用与方法参数相同的名称并在路径模板中使用。