★ Spring Boot的输入校验
springboot支持两种校验方式:1. Spring原生提供的 Validation,这种验证方式需要开发者手写验证代码,比较繁琐。就是普通的if判断2. 使用JSR 303的校验,这种验证方式只需使用注解、即可以声明式的方式进行验证,非常方便。
★ JSR 303校验的步骤:
(1)添加依赖,然后为被校验字段添加JSR 303注解,通过这些注解指定校验规则。
(2)为被校验的参数添加@Validated注解修饰,并【紧跟】一个Errors类型的参数,用于收集校验失败的错误提示。
处理方法中必须通过Errors参数来判断校验是否失败,校验失败就调回表单页面
(3)在页面上使用th:errors属性来输出校验失败的错误提示。
我对于JSR 303 校验总结:
1、添加依赖
2、在domain的实体类上面,在要校验的字段上添加依赖提供的注解,比如 @Length 校验长度。
3、在controller方法的参数上,为要校验的参数添加 @Validated 注解 和 一个 Errors 类型的参数
4、前端用 th:errors 来接收输出校验失败的错误提示
基于 JSR 303 检验的代码演示:
需求:校验前端传来的name属性的值的长度。
1、先添加支持 JSR 303 校验的依赖
2、哪个参数要校验,就在哪个参数上面添加对应的注解
在 name 属性上面添加 @Length 注解进行长度校验
为被校验的参数添加@Validated注解修饰,并【紧跟】一个Errors类型的参数,用于收集校验失败的错误提示。
处理方法中必须通过Errors参数来判断校验是否失败,校验失败就调回表单页面
//@Validated Book book 表示book这个参数需要得到参数校验
//校验失败时,所有的错误信息应该都是放在 errors 参数中
//如果校验失败,就返回表单页面。不然的话代码还是会往下走。
在页面上使用th:errors属性来输出校验失败的错误提示。
因为是校验 name属性,所以这里的 th:errors 需要拿到name属性值,表示是输出检验name字段的错误提示。
测试结果:
检验不通过,返回index 页面。
注意点:这个 【长度需要再6-20之间】这个提示,是 @Length 注解提供的,是默认的国际化信息。
国际化信息就是这个页面是中文的,就提示中文,
如果页面是英文的,就用英语来提示。
如果要自定义提示信息,可以添加 message 属性。
演示Validation校验
Spring原生提供的 Validation,这种验证方式需要开发者手写验证代码,比较繁琐。
就是在程序中写代码输入校验。就是普通的 if 校验
前端一样用 th:errors 来接收错误信息
测试结果
成功:txt 无法上传,只能上传图片
然后我弄了一张10M的图片进行测试,结果程序直接崩溃。