feign调用远程服务返回值的一种处理办法
在SpringCloud中,service-a中有一个方法:
@GetMapping("getPostByKeyword") public List<Post> getPostByKeyword(@RequestParam("keyword") String keyword){ return postService.getPostByKeyword(keyword); }
返回值是Post的List集合,将Post实体类拷贝一份放到service-b,而在service-b中想调用service-a中的getPostByKeyword方法,通过feign进行声明:
@GetMapping("/app/post/getPostByKeyword") List<Post> getPostByKeyword(@RequestParam("keyword") String keyword);
但在service-b中使用下面的方法接收时
List<Post>postList=bbsFeign.getPostByKeyword(keyword)
接收到属性值全是null, 两个Post属性完全一致,唯一区别是所处的module和package不同,程序继续往下执行时报了系列化的异常(因所有属性值都是null)。此时我们可以对Feign中返回值加以调整:
@GetMapping("/app/post/getPostByKeyword") ResponseEntity<Object>getPostByKeyword(@RequestParam("keyword") String keyword);
在service-b中这样接收就能获取到值了:
ResponseEntity<Object> postResponse =bbsFeign.getPostByKeyword(key); if (postResponse.getStatusCode().is2xxSuccessful()) { postList= (List<PostEntity>) postResponse.getBody(); }