1.feign的坑
1.GET请求自动转换成POST
服务提供者接口
@GetMapping("/user")
public User getUser(User user){
user.setId("old:" + user.getId());
user.setAge(18);
user.setName("default:" + user.getName());
return user;
}
公共API
@FeignClient(value = "produce1-service", url = "localhost:9000", path = "/provider", decode404 = true)
public interface ConsumerApi {
@GetMapping("/user")
User getUser(User user);
}
消费者调用
@RestController
public class IndexController {
@Autowired
private ConsumerApi consumerApi;
@RequestMapping("/user")
User getAllUser(){
User user = new User();
user.setId("11");
user.setName("mmkdier");
user.setAge(2000);
return consumerApi.getUser(user);
}
}
1.异常信息
Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
2.原因
feign默认的远程调用使用的是jdk底层的HttpURLConnection
feign.Client类
HttpURLConnection类
3.解决方案
方法一
@FeignClient(value = "produce1-service", url = "localhost:9000", path = "/provider", decode404 = true)
public interface ConsumerApi {
@GetMapping("/user")
User getUser(@RequestParam String id, @RequestParam String name, @RequestParam String age);
}
方法二
@FeignClient(value = "produce1-service", url = "localhost:9000", path = "/provider", decode404 = true)
public interface ConsumerApi {
@GetMapping("/user")
User getUser(@RequestParam Map<String, Object> map);
}
方法三
feign本身对这个问题也有了解决方案,添加maven依赖,就会使用HttpUriRequest请求,其他的可以不变
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
@FeignClient(value = "produce1-service", url = "localhost:9000", path = "/provider", decode404 = true)
public interface ConsumerApi {
@GetMapping("/user")
User getUser(User user);
}