Feign默认不支持GET方式传递POJO,也不支持传递多个引用类型的参数!本文就是解决这两个问题!
解决思路:
在微服务A端:将要传递的引用类型参数要么以body方式传递,要么以json串方式传递,在拦截器里解析json串拆分为更为详细的参数。
在微服务B端:按照SpringMVC支持写法去写,A端传来的请求参数自动映射到B端实体属性上!
解决问题的关键:是自定义Feign请求拦截器的实现
关键代码如下:
/**
* 处理Feign请求不支持Pojo的问题,以及参数为json串的转换处理!
*/
@AllArgsConstructor
@Configuration
public class FeignRequestInterceptor implements RequestInterceptor {
private ObjectMapper objectMapper;
@Override
public void apply(RequestTemplate template) {
if (template.method().equals("GET")) {
try {
Map> queries = new HashMap<>();
// 处理不带注解的参数解析
// feign 不支持 GET 方法传 POJO, json body转query
if (template.requestBody().asBytes() != nul