Spring Cloud / Alibaba 微服务架构 | 2021年11月更文挑战(5)
代码内容我会贴到下一篇文章中,需要的话可以参考一下,文章链接我会放在评论区,后续也会放到GitHub、gitee上(由于参加活动不能粘贴过多代码,还请大家见谅)。
之所以不将配置模块和通用模块定义成一个模块是因为配置模块引入了web的功能,是一个web工程。当其他工程引入配置模块时,那么这个工程就也是一个spring-boot-starter-web工程。但如果引用的是通用模块,则该模块不一定是一个web工程,这就是二者的区别。因为有些为了让工程的可变性,应用性比较强,实现解藕、通用、隔离,所以需要区分成两个模块。
创建配置模块
1、在e-commerce-springcloud下再新建一个子模块
e-commerce-mvc-config,即配置模块。
2、修改子模块的pom文件
引用一些子模块自己需要的依赖,此处是引用了web功能的依赖及前面创建的通用模块。
注:引用后记得要刷新一下maven。
3、创建对应的包
4、创建@IgnoreResponseAdvice注解
因为我们工程返回的统一响应都是上面定义的CommonResponse,由于有些响应可能不需要返回这样的一个标准格式,所以定义这个注解来允许一些接口可以不返回统一的响应。
注:
@Target({ElementType.TYPE, ElementType.METHOD})表示该注解可以定义在类及方法上。
@Retention(RetentionPolicy.RUNTIME)表示该注解要保留到运行时,因为我们要在运行时生效。
5、实现统一响应功能
在advice包下创建CommonResponseDataAdvice类。实现统一响应指的是在controller返回时拦截,对data数据进行包装。可以通过实现ResponseBodyAdvice注解来拦截。
注:
implements ResponseBodyAdvice< Object >
必须写Object,否则的话返回的如果是一个自定义对象就会报错。
通过 @RestControllerAdvice 源码可以知道,它就是@ControllerAdvice和@ResponseBody的合并,此注解通过对异常的拦截实现统一异常返回处理。
由于我们可能会引入第三方的包,所以此处限制一下它的作用范围(value="com.sheep.ecommerce"),只在这个包下生效。
6、实现全局异常捕获处理功能
即使代码抛出异常,我们也希望以统一的格式返回。@ExceptionHandler注解用来拦截系统中出现的所有异常,可以通过value=xxx来限制我们想要捕获的异常类型,此处使用了异常的基类,Exception.class来捕获所有异常。
@Slf4j是用来打印日志的注解。
至此我们就完成了通用模块与配置模块的初步开发。
作者:山坡羊
链接:https://juejin.cn/post/7026647181004128270