本文踩坑有二:
- not annotated with HTTP method type (ex. GET, POST)
- FeignException$BadRequest: status 400
1.not annotated with HTTP method
报错内容如下:
java.lang.IllegalStateException:
Method XXX not annotated with HTTP method type (ex. GET, POST)
Feign可以使用自带注解@RequestLine以及spring的注解@RequestMapping、@GetMapping等
几个需要注意的点:
- 使用spring的注解@RequestMapping需要指定method属性以及value(路径信息)
- 看了很多其他博客说不可以使用@GetMapping等这类注解,本人亲测,可以使用
- 第三点比较重要的:
如果使用Feign自带注解@RequestLine,需要修改默认配置。spring cloud netflix默认为feign提供的默认bean如下:
Decoder feignDecoder:ResponseEntityDecoder(其中包含SpringDecoder)
Encoder feignEncoder:SpringEncoder
Logger feignLogger:Slf4jLogger
Contract feignContract:SpringMvcContract
Feign.Builder feignBuilder:HystrixFeign.Builder
Client feignClient:如果Ribbon启用,则为LoadBalancerFeignClient,否则将使用默认的feign客户端。
看上方的Contract feignContract:SpringMvcContract,说明feign默认使用springmvc的协议或者约定,使用@RequestMapping的注解,若需要使用@RequestLine,需要修改约束配置,如下
@Configuration
public class Configuration {
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
}
在feignclient注解里配置