Spring-BootJava开发·持续学习·分享新知程序员

Java开发每日复盘2018_0510

2018-05-10  本文已影响83人  07e819eca0df

今天来给大家分享一下

「服务端开发相关的,一条重要的原则」。

即:「不要相信前端传过来的数据」

不要相信前端传过来的数据,意思并不是说前端传过来的数据一定不好一定有问题,

而是说,对于前端传过来的任何数据,都要先做校验操作校验通过后,再对其进行相关处理来使用该数据。

这样可以避免很多,不必要的异常被抛出。

那么「不要相信前端传过来的数据」,换句话说,则是「尽量要前端少传递数据」。

那么校验操作具体要怎么做呢?

方案一:

在每一个需要做校验判断的函数体,处理接收到传进来的数据之前,增加判断语句。

如:

public void setA(A a) {

    if(a == null) {

        throw new RuntimeException("a不能为空");

    }

}

方案二:

在SpringBoot中,加入了「Hibernate Validatoe」依赖,用于做「Bean Validation」校验(Java规范JSR303)。

如:

「Bean Validation 注解」(常用)

@Null

(验证对象是否为空)

(可验证 任何 类型)

@NotNull

(验证对象是否为非空)

(可验证 任何 类型)

@Min

(验证 Number 和 String 对象是否大于等于指定的值)

(可验证 数值 类型)

@Max

(验证 Number 和 String 对象是否小于等于指定的值)

(可验证 数值 类型)

@Size

(验证对象(Array,Collection,Map,String)长度是否在给定的范围之内)

(可验证 集合/Map/List 类型)

@Past

(验证 Date 和 Calendar 对像是否在当前时间之前)

(可验证 日期 类型)

@Future

(验证 Date 和 Calendar 对象是否在当前时间之后)

(可验证 日期 类型)

@AssertTrue

(验证 Boolean 对象是否为 true)

(可验证 布尔 类型)

@AssertFalse

(验证 Boolean 对象是否为 false)

(可验证 布尔 类型)

@Valid

(级联验证注解)

注解位置:

「成员变量前面」

如:

@NotNULL int a = 0;

「方法上方」

如:

@NotNull

private int a() {}

用于验证该方法的返回值。

校验结果处理:

方案一:

Public XX xxx(@Validated @RequestBody A a){}

(若校验不通过,则接口直接返回400异常,不执行该方法体)

方案二:

Public XX xxx(@Validated @RequedtBody A a, BindingResult result){

    if (result.hasError()) {

            //此处自行处理校验不通过情况

    }

}

(即使校验不通过,也会进入方法体,执行该方法。校验结果从result参数传入,由方法体内代码自行处理)

-- zeroOS 复盘于 2018/5/10

上一篇 下一篇

猜你喜欢

热点阅读