SpringBoot 使用validation数据校验
后端对数据进行验证
添加包
hibernate-validator
- <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
- <dependency>
- <groupId>org.hibernate.validator</groupId>
- <artifactId>hibernate-validator</artifactId>
- <version>6.0..Final</version>
- </dependency>
或者添加spring-boot-starter-validation
- <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-validation</artifactId>
- <version>1.4..RELEASE</version>
- </dependency>
或者添加spring-boot-starter-web
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
这两个springboot包里面都包含hibernate-validator包,这三个包只有有一个就可以
二:返回信息
我这里通过抛出异常来统一返回异常信息
- import com.shitou.huishi.contract.datacontract.code.RspCode;
- import com.shitou.huishi.contract.datacontract.exception.AuthException;
- import com.shitou.huishi.contract.datacontract.response.DataResponse;
- import javax.servlet.http.HttpServletRequest;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.validation.BindingResult;
- import org.springframework.validation.FieldError;
- import org.springframework.web.bind.MethodArgumentNotValidException;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ResponseBody;
- /**
- * Created by qhong on 2018/5/28 15:51
- **/
- @ControllerAdvice
- public class GlobalExceptionHandler {
- private Logger logger = LoggerFactory.getLogger(getClass());
- /**
- * 登陆异常
- * @param req
- * @param e
- * @return
- * @throws AuthException
- */
- @ExceptionHandler(value = AuthException.class)
- @ResponseBody
- public DataResponse handleAuthException(HttpServletRequest req, AuthException e) throws AuthException {
- DataResponse r = new DataResponse();
- r.setResCode(e.getCode()+"");
- r.setMsg(e.getMsg());
- logger.info("AuthException",e.getMsg());
- return r;
- }
- /**
- * 验证异常
- * @param req
- * @param e
- * @return
- * @throws MethodArgumentNotValidException
- */
- @ExceptionHandler(value = MethodArgumentNotValidException.class)
- @ResponseBody
- public DataResponse handleMethodArgumentNotValidException(HttpServletRequest req, MethodArgumentNotValidException e) throws MethodArgumentNotValidException {
- DataResponse r = new DataResponse();
- BindingResult bindingResult = e.getBindingResult();
- String errorMesssage = "Invalid Request:\n";
- for (FieldError fieldError : bindingResult.getFieldErrors()) {
- errorMesssage += fieldError.getDefaultMessage() + "\n";
- }
- r.setResCode(RspCode.VERIFICATION_DOES_NOT_PASS.getCode());
- r.setMsg(errorMesssage);
- logger.info("MethodArgumentNotValidException",e);
- return r;
- }
- /**
- * 全局异常
- * @param req
- * @param e
- * @return
- * @throws Exception
- */
- @ExceptionHandler(value = Exception.class)
- @ResponseBody
- public DataResponse handleException(HttpServletRequest req, Exception e) throws Exception {
- DataResponse r = new DataResponse();
- r.setResCode(RspCode.CODE_ERROR.getCode());
- r.setMsg(RspCode.CODE_ERROR.getMessage()+","+e.getMessage());
- logger.error(e.getMessage(),e);
- return r;
- }
- }
三:具体代码
总结框架提供了那些校验:
- JSR提供的校验注解:
- @Null 被注释的元素必须为 null
- @NotNull 被注释的元素必须不为 null
- @AssertTrue 被注释的元素必须为 true
- @AssertFalse 被注释的元素必须为 false
- @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
- @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
- @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
- @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
- @Size(max=, min=) 被注释的元素的大小必须在指定的范围内
- @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
- @Past 被注释的元素必须是一个过去的日期
- @Future 被注释的元素必须是一个将来的日期
- @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
- Hibernate Validator提供的校验注解:
- @NotBlank(message =) 验证字符串非null,且trim后长度必须大于0
- @Email 被注释的元素必须是电子邮箱地址
- @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
- @NotEmpty 被注释的字符串的必须非空
- @Range(min=,max=,message=) 被注释的元素必须在合适的范围内
Code:
- @Range(min=,max=,message = "档案类型错误")
- private Integer archiveType;
- @NotBlank(message = "档案主体名称不能为空")
- private String subjectName;
- @NotBlank(message = "证件号不能为空")
- private String subjectNo;
Controller:
- public DataResponse createArchive(@RequestBody @Valid ArchiveInfoRequest request)
添加@Valid或者@Validated都可以。
补充:
网上提供的其他异常:
- @ExceptionHandler(value =BindException.class)
- @ResponseBody
- public DataResponse handleBindException(BindException e) throws BindException {
- // ex.getFieldError():随机返回一个对象属性的异常信息。如果要一次性返回所有对象属性异常信息,则调用ex.getAllErrors()
- FieldError fieldError = e.getFieldError();
- StringBuilder sb = new StringBuilder();
- sb.append(fieldError.getField()).append("=[").append(fieldError.getRejectedValue()).append("]")
- .append(fieldError.getDefaultMessage());
- // 生成返回结果
- DataResponse r = new DataResponse();
- r.setResCode(RspCode.VERIFICATION_DOES_NOT_PASS.getCode());
- r.setMsg(sb.toString());
- logger.info("BindException", e);
- return r;
- }
https://blog.csdn.net/u013815546/article/details/77248003
https://blog.csdn.net/hry2015/article/details/79572713
SpringBoot 使用validation数据校验的更多相关文章
- SpringBoot中BeanValidation数据校验与优雅处理详解
目录 本篇要点 后端参数校验的必要性 不使用Validator的参数处理逻辑 Validator框架提供的便利 SpringBoot自动配置ValidationAutoConfiguration Va ...
- SpringBoot入门 (十一) 数据校验
本文记录学习在SpringBoot中做数据校验. 一 什么是数据校验 数据校验就是在应用程序中,对输入进来得数据做语义分析判断,阻挡不符合规则得数据,放行符合规则得数据,以确保被保存得数据符合我们得数 ...
- 1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知
乔丹是我听过的篮球之神,科比是我亲眼见过的篮球之神.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免 ...
- 【使用篇二】SpringBoot服务端数据校验(8)
对于任何一个应用而言,客户端做的数据有效性验证都不是安全有效的,而数据验证又是一个企业级项目架构上最为基础的功能模块,这时候就要求我们在服务端接收到数据的时候也对数据的有效性进行验证.为什么这么说呢? ...
- Springboot:JSR303数据校验(五)
@Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...
- SpringBoot 之 JSR303 数据校验
使用示例: @Component @ConfigurationProperties(prefix = "person") @Validated //使用数据校验注解 public ...
- SpringBoot - Bean validation 参数校验
目录 前言 常见注解 参数校验的应用 依赖 简单的参数校验示例 级联校验 @Validated 与 @Valid 自定义校验注解 前言 后台开发中对参数的校验是不可缺少的一个环节,为了解决如何优雅的对 ...
- 深入了解数据校验:Bean Validation 2.0(JSR380)
每篇一句 > 吾皇一日不退役,尔等都是臣子 对Spring感兴趣可扫码加入wx群:`Java高工.架构师3群`(文末有二维码) 前言 前几篇文章在讲Spring的数据绑定的时候,多次提到过数据校 ...
- 深入了解数据校验:Java Bean Validation 2.0(JSR380)
每篇一句 吾皇一日不退役,尔等都是臣子 相关阅读 [小家Java]深入了解数据校验(Bean Validation):基础类打点(ValidationProvider.ConstraintDescri ...
随机推荐
- netcore webapi统一配置跨域问题
修改startup类中的configure方法
- d'jang基础
1,建立一个名为guest的django项目,django-admin startproject guest 生成一个guest文件夹,包含一个guest文件夹和一个manage.py cd gue ...
- 定时调度任务quartz
依赖 <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> < ...
- 20155228 2016-2017-2 《Java程序设计》第3周学习总结
20155228 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 认识对象 类与对象 类和对象的关系:类是对象的设计图,对象是类的实例 参考:将"名 ...
- GO富集分析
GO的主要用途之一是对基因组进行富集分析.例如,给定一组在特定条件下上调的基因,富集分析将使用该基因组的注释发现哪些GO术语被过度表示(或未充分表示). 富集分析工具 用户可以直接从GOC网站的 ...
- mybatis源码解析8---执行mapper接口方法到执行mapper.xml的sql的过程
上一篇文章分析到mapper.xml中的sql标签对应的MappedStatement是如何初始化的,而之前也分析了Mapper接口是如何被加载的,那么问题来了,这两个是分别加载的到Configura ...
- Linux基础命令---查找进程id
pidof pidof可以查找指定名称的进程的pid,将结果送到标准输出.pidof有两种返回值:0,找到至少一个进程:1,没有找到进程.pidof实际上与killall5相同:程序根据调用它的名称进 ...
- Django框架----命名空间模式
命名空间模式 即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL. 举个例子: project中的urls.py from django.conf.urls im ...
- java之异常统一处理
spring-mvc.xml <!-- aop --> <aop:aspectj-autoproxy/> <beans:bean id="controllerA ...
- pycharm快捷键及常用设置
Alt+Enter 自动添加包 shift+O 自动建议代码补全 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+Shift+F 高级查找 C ...