PathVariable annotation was empty on param 0.问题解决

项目启动报错,提示信息如下:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.xxx.feign.StoreFeign': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: PathVariable annotation was empty on param 0.

 上网查询了下,原来feign里边涉及到@PathVariable@RequestParam的用法跟SpringMVC有所差别,总结起来就是:

  • Spring MVC 控制器: 如果方法参数名和路径变量名或查询参数名相同,可以省略路径变量或查询参数的名称。
  • Feign 客户端: 必须显式指定路径变量名或查询参数名,即使它们和方法参数名相同。

在Controller中使用@PathVariable@RequestParam 注解用于从 HTTP 请求中提取参数,通常不需要指定路径变量名,Spring 会自动根据方法参数名来匹配 URL 路径中的变量名(如果参数名与路径变量名相同的话)。如果不同,才需要显式地指定路径变量名:

@GetMapping("/users/{userId}")
public User getUser(@PathVariable("userId") String id) {
    // id对应路径变量userId
}

上面代码中路径变量名为userId,参数名为id,此时名称不一样,需要在@PathVariale中指定跟路径名一致,如果路径变量名与参数名一样,则@PathVariale不需要使用括号标注路径变量名:

@GetMapping("/users/{userId}")
public User getUser(@PathVariable String userId) {
    
}

@RequestParam 也是一样的道理,如果方法参数名和查询参数名相同,可以省略 @RequestParam 中的参数名:

@GetMapping("/users")
public User getUser(@RequestParam String id) {
    // ...
}

但是在Feign 客户端中,@PathVariable@RequestParam 的使用方式与 Spring MVC 中类似,但是在Feign 中的参数必须显式指定路径变量名或查询参数名,即使它们和方法参数名一致。Feign 不会自动根据参数名推断路径变量或查询参数的名称。因此在Feign进行微服务调用时,凡是使用@PathVariable@RequestParam必须显式指定变量名或查询参数名。要不然就会报开头的异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值