问题一:由于马虎,缺少配置,报错如下:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.gemantic.springcloud.service.AdditionClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: Method add not annotated with HTTP method type (ex. GET, POST) Caused by: java.lang.IllegalStateException: Method add not annotated with HTTP method type (ex. GET, POST)
解决方案,在Feign接口上没有配置请求式,在接口上增加请求方式
@GetMapping(value="/add") 或 @RequestMapping(value="/add"),完整代码如下: 1. @FeignClient("springcloud-addition-service") 2. public interface AdditionClient { 3. 4. /** 5. * 加法接口 6. * @param a 7. * @param b 8. * @return 9. */ 10. // @RequestMapping(value = "/add") 11. @GetMapping(value = "/add") 12. ResponseEntity<ResultData> add(@RequestParam("a") @NotNull Integer a, @RequestParam("b") @NotNull Integer b); 13. }
注: value="/add"
与真正服务一致。
问题二:
Caused by: java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0
暴漏Restful服务的方法如下:
@Slf4j @RestController @Api(description = "加法接口") public class AdditionController { @Autowired private Addition addition; @GetMapping(value = "/add") @ApiOperation(value = "a + b = ?") public ResponseEntity<ResultData> add(@RequestParam @NotNull Integer a, @RequestParam @NotNull Integer b) { if (log.isInfoEnabled()) { log.info("add {} + {}", a, b); } int result = addition.add(a, b); ResultData resultData = ResultData.builder().message(Message.builder().code(0).message(Message.SUCCESS_MESSAGE).build()).build(); resultData.setData(result); return ResponseEntity.ok(resultData); } }
Feign的方式的接口如下:
@GetMapping(value = "/add") ResponseEntity<ResultData> add(@RequestParam @NotNull Integer a, @RequestParam @NotNull Integer b);
服务启动时就会报错误:
Caused by: java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0
解决方案:在 @RequestParam
增加方法名
@GetMapping(value = "/add") ResponseEntity<ResultData> add(@RequestParam("a") @NotNull Integer a, @RequestParam("b") @NotNull Integer b);
注: @PathVariable
与 @RequestParam
类似的。
问题三:
Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract org.springframework.http.ResponseEntity com.gemantic.springcloud.service.AdditionClient.add(java.lang.Integer,java.lang.Integer)
解决方案:当使用Feign时,如果发送的是get请求,那么需要在请求参数前加上 @RequestParam
或 @PathVariable
注解修饰,Controller里面可以不加该注解修饰。
1. @GetMapping(value = "/add") 2. ResponseEntity<ResultData> add(@RequestParam("a") @NotNull Integer a, @RequestParam("b") @NotNull Integer b);