springboot validated注解数据校验 异常处理
springboot validated 数据校验
- validated 数据校验
简单的写一下这个用法啊,清晰的本篇文章就记录这个注解的一个用法。
validated 数据校验
我们一般的数据校验是怎么用的?在常规模式下我们可能就是在前端去通过js去判断?还是在后端重新查找数据库,当然还是有其它的方法,在这里介绍一个注解validated这个注解,我们结合springboot 去使用。这样就容易很多。
首先呢,我们需要在pom中导入这个注解需要的依赖。
这里建议就这样做了。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
这是和springboot整合起来的这样的一个注解,现在大概就是2.3以上的版本使
用了,我们直接导入这个整合的依赖。导入其他形式的依赖可能会不起作用。
这里展示一个校验,也是比较简单的。
我们这里从登录校验开始说明
我们可以把它用在这里User实体类的接收参数上。 User是我们的实体类,我们用这个实体类修饰的参数来接收前端传来的数据。当然你这里要保证封装的字段和实体类字段一致,当然你也可以进行其它处理。
然后就去实体类进行一个几个操作。
我们来举例两个,当然这个注解功能还是非常方便的。
当然我们班也可以去指定邮箱的格式,同样一个字段上可以加多个校验注解。
其他的自己去查找就是了,这里只是说明一下使用的方法。
我们加了校验注解后,如何去配合使用呢?
我们可以去做一个全局异常捕获的处理类,当然怎么样封装我们可以自己去做。
代码如下
package jgdabc_.ExceptionHander;import jgdabc_.common.R_;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
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;
import org.springframework.web.bind.annotation.ResponseStatus;import javax.servlet.http.HttpServletRequest;
import java.util.List;/*** @author 兰舟千帆* @version 1.0* @date 2022/12/9 21:06*/
@ControllerAdvice(annotations = Controller.class)
@Slf4j
//做一个捕获参数校验异常的类
public class GlobalDefaultExceptionHandler {private static final Logger logger = LoggerFactory.getLogger(GlobalDefaultExceptionHandler.class);//捕获校验失败的异常@ExceptionHandler(MethodArgumentNotValidException.class)@ResponseBody//设置响应状态码,当然这里其实我并没有用上,我自己在R_对象封装了@ResponseStatus(HttpStatus.OK)public R_ handleParamCheckExcepion(HttpServletRequest req, MethodArgumentNotValidException ex) {//那下面这里就是读取具体的校验失败的数据了,可能不是一个,所以其实有一个遍历的过程。BindingResult bindingResult = ex.getBindingResult();StringBuilder paramErrorMsg = new StringBuilder();if (bindingResult.hasErrors()) {List<ObjectError> allErrors = bindingResult.getAllErrors();for (ObjectError objectError : allErrors) {String msg = objectError.getDefaultMessage();if (paramErrorMsg.length() == 0) {paramErrorMsg.append(msg);} else {paramErrorMsg.append(',');paramErrorMsg.append(msg);}}}//这里我们输出了错误的日志logger.error("参数校验失败! uri:{},错误信息:{}", req.getRequestURI(), paramErrorMsg.toString());//这里我用R_对象去封装返回了return R_.error(paramErrorMsg.toString());}
}
R_实体是做的一个实体封装类,其实是一个泛型类。泛型的方便指出在这里可以体现出来。来看R_。一直在用这个,作为工具类很方便嘿嘿。
package jgdabc_.common;import lombok.Data;import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;//通用返回结果,这里其实就是一个泛型封装类
@Data
public class R_<T>implements Serializable {private Integer code; //编码:1成功,0和其它数字为失败private String msg; //错误信息private T data; //数据private Map map = new HashMap(); //动态数据
//这样的泛型设计非常巧妙了public static <T> R_<T> success(T object) {R_<T> r = new R_<T>();r.data = object;//这里可以接收到返回的值r.code = 1;return r;}public static <T> R_<T> error(String msg) {R_ r = new R_();r.msg = msg;r.code = 0;return r;}public R_<T> add(String key, Object value) {this.map.put(key, value);return this;}}
前台我们直接这样取就可以了。当然前端怎么写自己可以搞,我们具体的逻辑就是这样。
这里啊,其实就是直接从这里来捕获校验了。在这里接收封装参数校验后,出现校验问题的话,会直接跑到异常捕获里面,并不会执行方法内部的·1逻辑,其实这里响应也是比较快的。
ok,后面追加一篇登录注册校验的逻辑,我们用注解校验和前端js校验两种方式,具体都写下来来进行对比。本篇就到这里。
springboot validated注解数据校验 异常处理相关推荐
- SpringBoot中后端数据校验
文章目录 1.为什么后端要进行数据校验? 2.怎么使用数据校验?(要添加对应依赖) 实现对手机号码的数据校验: 入参对象包含集合时,怎么对集合中的每个属性进行校验 1.为什么后端要进行数据校验? 如果 ...
- SpringBoot @Validated注解实现参数校验
1. 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量 ...
- SpringBoot——服务端数据校验
Spring Validator和Hibernate Validator是两套Validator,可以混着用,这里我们用Hibernate Validator 一.添加依赖: 添加依赖的时候注意不要添 ...
- Validated数据校验,看这一篇就够了
目录 1 介绍 1.1 什么是数据校验 1.2 Java提供的数据校验工具 1.3 @Validated和@Valid的区别 1.4 依赖导入 1.5 常用数据校验注解 2 使用 2.1 校验实体类 ...
- java分组校验_SpringBoot @Validated注解实现参数分组校验的方法实例
前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. org.springframework.bo ...
- springboot中hibernate validator校验模式,分组校验,自定义校验
检验模式 上面例子中一次性返回了所有验证不通过的集合,通常按顺序验证到第一个字段不符合验证要求时,就可以直接拒绝请求了.Hibernate Validator有以下两种验证模式: 普通模式(默认是这个 ...
- springmvc(四) springmvc的数据校验的实现
so easy~ --WH 一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端 ...
- springboot后端数据校验以及异常处理
文章目录 常用校验工具包 1.package javax.validation.constraints 包 2.package org.hibernate.validator.constraints; ...
- 如何优雅的处理异常?SpringBoot全局异常与数据校验
要思考的问题 在现在的前后端交互中,通常都规范了接口返回方式,如返回的接口状态(成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,因此,如果想做全局异常,并且异常发生后 ...
最新文章
- UVA10003 切木棍 Cutting Sticks(区间DP、细节)
- 35岁不是程序员的坎儿,看不清楚这件事才是!
- linux下进制是如何转换?
- SVG 动画实现弹性的页面元素效果
- mathematica在linux上运行,Mathematicamatlab的linux版的安装
- 使用ElasticSearch进行近实时索引
- 【Alpha阶段】第一次Scrum Meeting
- C语言 第五章 选择结构 答案,c语言第五章 选择结构程序设计(习题册答案).doc
- oracle 存long,ORACLE中LONG类型字段的存取
- java压缩图片等比缩放_java对图片进行压缩和resize缩放的方法
- 2 年 6 个月 11 天,外包到阿里的修仙之路!| 原力计划
- Nginx+PHP(FastCGI)环境搭建
- Unicode -- 从code point到UTF16的计算方法
- 如何用程序哄老婆开心
- powerdns 安装部署备忘
- 基于机智云的智能家用窗户窗帘控制及物联网系统
- Python While循环与break语句_加工零件
- 【linux服务器】使用csdn云主机的体验与问题
- mysql联合唯一索引可以有多个吗_mysql可以设置联合唯一索引吗?
- 图像处理—数据集的构建