24

我正在尝试映射 url /locations/{locationId}/edit.html - 这似乎与此代码一起使用:

@Controller
@RequestMapping( "/locations" )
public class LocationController
{
  @RequestMapping( value = "/{locationId}/edit.html", method = RequestMethod.GET )
  public String showEditForm( Map<String, Object> map, @PathVariable int locationId )
  {
    map.put( "locationId", locationId );
    return "locationform";
  }
}

调用提到的 url 会导致异常:

java.lang.IllegalArgumentException: Name for argument type [int] not available, and parameter name information not found in class file either.

我是否以错误的方式使用 @PathVariable 注释?

如何正确使用?

4

3 回答 3

38

它应该是@PathVariable("locationId") int locationId

于 2012-01-31T10:26:05.603 回答
16

您应该将value参数添加到您的@PathVariable,例如,

 public String showEditForm(
       @PathVariable("locationId") int locationId,
       Map<String, Object> map) {
    // ...
 }
于 2012-01-31T10:26:35.603 回答
0

JDK 7 启用参数名称自省

参数名说明在JDK7中可用,否则必须在Annotation中设置。

您应该在显式使用 JDK 说明(如 Johan 和 Moniul 建议的)作为注释的一部分之前使用它,因为如果您想更改参数键,您只需要编辑变量名而不是注释规范中的任何其他出现在其他行和/或类中。让我们称其为单一事实来源。

于 2018-05-09T11:58:25.813 回答