该笔记是看视频的记录,视频地址:http://www.imooc.com/learn/810
一、使用@Valid做表单验证

domain中定义valid规则

Controller增加Valid注解,并且对BindingResult做处理
二、使用AOP处理请求

请求方法前打印日志

请求方法后打印日志

获取返回值

定义一个@Pointcut然后引用
三、统一异常处理
1、异常情况处理

成功则返回新增的girl,失败返回错误信息

成功时:返回了成功的对象

失败时:返回错误信息
2、更好的处理方式
上面的返回结果并不友好,不方便前端处理,我们期望的是下图这样的:包括一个code表示成功失败,msg表示处理结果信息,data表示对象信息

友好的返回结果
下面来看实现:

定义一个Result类作为返回对象

定义一个Util方便操作

引用代码
3、Exception的处理
当系统发生异常时

当系统发生异常时
前台就会收到这样的消息

前台就会收到这样的消息
这不是我们想要的,我们希望发生异常的时候依然可以正常返回,可以通过一个ExceptionHandle来实现

ExceptionHandle中指定handle的异常类型和返回值
就得到了我们想要的返回格式

就得到了我们想要的返回格式
4、异常精细化处理:为异常编号

实现一个Exception的子类,增加code属性

不同业务抛出不同的code

捕获异常,如果是GirlException,则抛出返回的code,否则使用统一的code
5、异常编号用枚举类型代替
100、101这种编号写在具体业务逻辑里面显然不妥,时间长了,前台抛出一个100的异常,我们很难再想起这个100到底代表什么,也不好找到这些代码,通常的做法是把所有异常编号都放在一个枚举类型中,这样就好查啦
如下图,我们新建了一个枚举类,有了这个枚举类,我们再增加异常类型、修改异常提示,就再也不用去茫茫code海里面去搜索了。

1、新建一个枚举类,定义异常编号和中文提示

2、throw异常里面,就不写code和msg了,用枚举值代替

3、修改GrilException的参数

4、调用结果也是一样的
四、单元测试
1、测试Service

测试Service

测试Controller
2、测试API

测试API:Status

测试API:返回值

上面的例子是匹配返回值和abc,显然不相等,所以报错
maven打包的时候也会自动运行这些单元测试,执行mvn clean package

自动运行单元测试,并报出一个异常