Java @PathVariable注释与基于接口/类的代理不同

Java @PathVariable注释与基于接口/类的代理不同,java,spring,proxy,annotations,Java,Spring,Proxy,Annotations,我有接口UserController和类UserControllerImpl。 当我在UserControllerImpl中添加@RequestMapping和@PathVariable并使用基于类的代理时,我能够使用此URL获取用户: 获取: 当我将代理更改为“基于接口”,并将@RequestMapping和@PatyVariable添加到接口时,我无法获取代理,并收到以下错误: 请求处理失败;嵌套异常为java.lang.IllegalArgumentException:参数类型[int]的

我有接口UserController和类UserControllerImpl。 当我在UserControllerImpl中添加@RequestMapping和@PathVariable并使用基于类的代理时,我能够使用此URL获取用户:

获取:

当我将代理更改为“基于接口”,并将@RequestMapping和@PatyVariable添加到接口时,我无法获取代理,并收到以下错误:

请求处理失败;嵌套异常为java.lang.IllegalArgumentException:参数类型[int]的名称不可用,并且在类文件中也找不到参数名称信息

我能够解决将“userId”添加到@PathVariable中的问题

@GetMapping(“/{userId}”)

公共用户getUser(@PathVariable(“userId”)int userId)

有人能解释一下,如果我使用相同的变量名,为什么我必须在@PathVariable中添加“userId”?
它是否与代理连接?

可能是因为当某人实现一个接口时,他们可以使用他们想要的任何参数名(他们不必匹配接口定义)。有一些细节,但基本上没有足够的接口调试信息供Spring通过反射来发现参数名(除非你跳过一些限制)。可能是因为当有人实现一个接口时,他们可以使用他们想要的任何参数名(他们不必匹配接口定义)。有一些细节,但基本上Spring接口上没有足够的调试信息,无法通过反射发现参数名(除非您跳过一些限制)。