在运行下代码,我们就可以看到异常从用户服务->认证服务->网关->前端这么一个流程 。
•用户服务抛出的异常
文章插图
•认证服务抛出的异常
文章插图
•前端显示的异常
文章插图
场景四:时区问题随着业务的变化,我们可能会在请求参数或者响应参数中增加关于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看日志 ?:
推荐阅读
- 简述关于containerd设置代理
- 一次关于架构的“嘴炮”
- 九曲红梅红茶存放时间,九曲红梅红茶的色泽
- 红茶产业中存在的问题,红茶的初制加工
- CVE-2021-4034 关于 Linux Polkit 权限提升漏洞的修复方法
- 大佬Google工作10年,关于技术、管理和职场生涯的一些感悟
- 一篇关于低代码平台的非完整推荐
- springcloud 整合openFeign
- 关于开学的文案说说有哪些?
- 红茶的收敛性,红茶护肤的功效与作用