我在練習微服務的時候發現了一個很奇怪的事情。在用openFeign的時候報了一個異常,花了我半天的時間,最后問題解決了。代碼如下:
這個是被調用的控制層代碼
@RestController
@Slf4j
public class PaymentController {
@Resource
private PaymentService paymentService;
@Value("${server.port}")
private String serverPort;
@GetMapping("/payment/hystrix/ok/{id}")
public String paymentInfo_ok(@PathVariable Integer id){
String result = paymentService.paymentInfo_ok(id);
log.info("*******result: "+ result);
return result;
}
@GetMapping("/payment/hystrix/timeout/{id}")
public String paymentInfo_Timeout(@PathVariable Integer id){
String result = paymentService.paymentInfo_Timeout(id);
log.info("*******result: "+ result);
return result;
}
}
下面是調用控制層的接口:
@Component
@FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT")
public interface PaymentHystrixService {
@GetMapping("/payment/hystrix/ok/{id}")
public String paymentInfo_ok(@PathVariable Integer id);
@GetMapping("/payment/hystrix/timeout/{id}")
public String paymentInfo_Timeout(@PathVariable Integer id);
}
這時就會報一個錯誤,FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: PathVariable annotation was empty on param 0.
一般來說@PathVariable 如果是一個參數的話,是可以省略的嗎?我啟動被調用的控制層都沒問題。然后啟動調用的服務,然后報錯。
之后我一點點去看,發現可能是@PathVariable的問題。
我就奇怪了,為啥會報錯。當然如果把這個注解刪了,能啟動但是報500錯誤。
最后正確代碼提上:
@Component
@FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT")
public interface PaymentHystrixService {
/*
* 我發現了一個很奇怪的現象,就是如果@PathVariable后面沒有加參數的話,就會報錯。
* */
@GetMapping("/payment/hystrix/ok/{id}")
public String paymentInfo_ok(@PathVariable("id") Integer id);
@GetMapping("/payment/hystrix/timeout/{id}")
public String paymentInfo_Timeout(@PathVariable("id") Integer id);
}
