day02下

数据校验?

后台需要将前端传递的数据进行合法性验证

前端校验:用户可以自行关闭,不安全

java:后端校验

我们总是不信任前端的,所以需要前端+后端双重校验

后端使用JSR303标准进行校验,步骤:

1)给需要校验的javaBean上标注校验注解

2)告诉Springboot需要进行校验(在需要校验的javaBean上加上@Valid)

sprngmvc在进入方法之前,确定参数数值的时候就会进行校验,如果校验出错,则直接返回错误,不执行代码

3)如果感知校验成功还是失败?

只需要给开启了校验的javaBean参数后面,紧跟一个BindingResult对象就可以获取到校验结果,只要有这个参数,即使校验错了,方法也会执行,我们需要手动处理结果,BindingResult有个方法getErrorCount()可以判断校验是否出错和出错的个数,所以可以通过判断校验是否成功来决定是否执行下面的代码

day02下

但是我们并不希望每次需要校验都要写一段代码来完成,这样的话太冗杂,所以把这个功能给抽取出来变成一个切面aop,要专门写一个aop切面类,需要导入对应jar包和用对应的注解。

day02下

然后在切面类加上@Aspect注解

切面的通知分为前置通知,后置通知,返回通知,环绕通知,异常通知

这里想利用aop完成统一的数据校验,所以用环绕通知合适(因为要返回给前端无论成功与否),aop类代码如下:

day02下

用的环绕通知,注解@Around,try中proceed()前的是前置通知,后的是返回通知,catch里抓的是异常通知,finally的是后置通知。

 

还要统一处理异常类,接下来就是这个类的编写

day02下

但是这里接受不到这个异常,因为环绕通知里面抓到异常并没有进行处理,所以到不了异常类这里,应该要抛出来:

day02下

注意,Throwable是最大的异常类,应该转成运行时异常抛

 

 

 

 

商品的数据模型

1.spu与sku?

spu是库存量单位,即库存进出计量的基本单元,可以以件,盒,托盘为单位

sku是产品统一编号的简称,每种产品对应唯一的sku号

spu是某种产品

比如,苹果X就是spu,苹果X 银色 64GB就是sku,苹果X 银色 64GB的库存就是spu