功能模块:
- RestController模块
- 加载自定义bean
- 自定义JSON序列化反序化列
- 统一异常处理
- 拦截器+自定义注解(实现权限校验等)
- 返回结果统一封装
- 上下文传递(ThreadLocal实现)
项目初始化:
从 http://start.spring.io 网站上面选择创建自己的项目脚手架。
dependencies中添加web的依赖,generate project 下载项目。
添加自定义的bean
有些业务场景下面我们需要自己定义的bean或者第三方的bean交给spring ioc容器去管理
实现代码如下:
image.png
自定义JSON序列化反序化列
Spring内部采用Jackson实现对象的序列化和反序列化。
这里只要自己在容器初始化的时候,将自己的ObjectMapper的对象实例加载到容器中,
spring就会优先使用用户添加的对象。
这里也是体现约定大于配置的思想。
实现代码如下:
image.png
统一异常处理
业务系统中,在写代码的时候捕捉了一个异常,需要将错误信息封装给调用方。
由于异常或者错误的方式类型是有限的,但是随着业务的扩大,抛出异常和发生错误的地方确会变得越来越来多。
有了统一的异常处理方式,这样就可以在业务代码里面大胆放心的抛出异常。
实现代码如下:
image.png
拦截器+自定义注解(实现权限校验等)
业务框架中拦截器必不可少,但是spring提供的根据资源地址的拦截方式,将拦截的行为和代码分开了。
如果是能通过注解的方式进行拦截,进而处理相应的逻辑。
这样在写业务代码的时候就可以指定拦截逻辑,而不用在去做spring的配置。
实现代码如下:
image.png
返回结果统一封装
在请求应答的业务中,我们通常回合调用方约定一种固定的应答模式经典案例就是{code,msg,result}这种方式。
但是在我们书写具体业务的时候,其实这种对象的封装和业务并没有关联。
比如我这个方法是查询用户信息的,那我的返回值就是返回用户对象,所以固定的应答结构应该交给框架来做。
实现代码如下:
image.png
上下文传递(ThreadLocal实现)
在一个有用户登录的系统中,特别是http协议中,我们经常和调用方约定将某些标识类的信息通过http的header信息传达给服务端。
而在spring帮我封装好的controller里面我们又不方便去获取请求头中的信息。
所以这里实现一个简单的上下文信息传递。
实现代码如下:
image.png
image.png
image.png
网友评论