关于OpenFeign那点事儿 - 使用篇( 三 )

在运行下代码,我们就可以看到异常从用户服务->认证服务->网关->前端这么一个流程 。
•用户服务抛出的异常

关于OpenFeign那点事儿 - 使用篇

文章插图
 
•认证服务抛出的异常
关于OpenFeign那点事儿 - 使用篇

文章插图
 
•前端显示的异常
关于OpenFeign那点事儿 - 使用篇

文章插图
 
场景四:时区问题随着业务的变化,我们可能会在请求参数或者响应参数中增加关于Date类型的参数,这个时候你会发现,它的时区不对,少了8个小时 。
这个问题其实是Jackson组件带来的,该问题其实也有不同的解法 。
1.在每个Date属性添加上@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")2.传参统一转为yyyy-MM-dd HH:mm:ss格式的字符3.统一配置spring.jackson
很明显,第三种解法最合适,我们在配置文件做如下的配置即可 。
spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8这里需要注意下,我们@FeignClient的配置是自定义配置的FeignConfig类,在自定义配置类中加载了解码器,而解码器依赖的是全局的HttpMessageConverters实例,和SpringMVC依赖的是同一个实例,所以该配置生效 。有些场景下会自定义HttpMessageConverters,那么该配置则不生效 。
public class FeignConfig {@Autowiredprivate ObjectFactory<HttpMessageConverters> messageConverters;// 自定义解码器@Beanpublic Decoder decoder(ObjectProvider<HttpMessageConverterCustomizer> customizers){return new FeignDecoder(new OptionalDecoder(new ResponseEntityDecoder(new SpringDecoder(messageConverters, customizers))));}}其他问题不知道细心的朋友是否有看到在第一节定义SysUserFeignApi接口的时候,我在@FeignClient注解上使用了一个属性:path,并且接口上没有使用@RequestMapping注解 。
回想下,之前我们在使用Feign的时候,是不是这么使用的:
@FeignClient(name = "anyin-center-upms",contextId = "SysUserFeignApi",configuration = FeignConfig.class)@RequestMapping("/api/sys-user")public interface SysUserFeignApi {}这里不使用这个方式的原因是我当前版本的Spring Cloud OpenFeign已经不支持识别@RequestMapping注解了,它不会在请求的时候加入到请求的前缀,所以即使解决了@RequestMapping注解被SpringMVC识别为Controller类也无法正常运行 。
所以,这里使用了path属性 。
最后以上,就是我们在使用OpenFeign组件的时候会遇到的大部分场景,你了解吗 ?
相关源码地址:Anyin Cloud[2]
References[1] 不会吧,你还不会用RequestId看日志 ?: 


推荐阅读