使用 Feign 和 Spring MVC 时对 ResponseEntity 进行编码和解码?
Posted
技术标签:
【中文标题】使用 Feign 和 Spring MVC 时对 ResponseEntity 进行编码和解码?【英文标题】:Encode and Decode ResponseEntity when using Feign and Spring MVC? 【发布时间】:2018-12-25 07:37:41 【问题描述】:我正在尝试使用动态伪装。但是在从 RequestMapping 转换响应时我遇到了很多问题。
Controller.java:
@RequestMapping("/users")
public ResponseEntity<List<User>> sendUsers
MyFeignClient.java:
public interface MyFeignClient
@RequestLine(value="GET /api/users")
ResponseEntity<List<User>> getUsers();
MainClass.java:
MyFeignClient callService = Feign.builder()
.encoder(new Encoder.Default())
.decoder(new Decoder.Default())
.requestInterceptor(new FeignConfig(props).getJwtRequestInterceptor())
.target(MyFeignClient.class, "http://localhost:8710");
然后:
ResponseEntity<List<User>> txnPool = callService.getUsers();
但我有以下错误:
feign.codec.DecodeException User 不是此解码器支持的类型
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:我使用 JacksonEncoder 和 JacksonDecoder 解决了这个问题
MyFeignClient callService = Feign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.requestInterceptor(new FeignConfig(props).getJwtRequestInterceptor())
.target(MyFeignClient.class, "http://localhost:8710");
我还将@Headers("Content-Type: application/json")
添加到我的Feign Interface
【讨论】:
如果feign客户端接口MyFeignClient
被构造函数注入怎么办?此外,使用eureka
注册表,我们不会在localhost:8710
中运行服务器......我们如何在目标文件夹中提及发现客户端名称?如果可能的话,我们如何在配置类中添加这种编码和解码逻辑。以上是关于使用 Feign 和 Spring MVC 时对 ResponseEntity 进行编码和解码?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2 - 自动装配服务时对 Feign 客户端的不满意依赖
在 Spring mvc/rest 开发中创建控制器时对以下内容感到困惑:ModelAndView、Model、@ResponseBody、@ResponseEntity
SpringCloud + Zookeeper + Feign整合及Feign原理
Spring Boot 和 Feign Client 解析 Enum参数