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注解数据校验 异常处理相关推荐

  1. SpringBoot中后端数据校验

    文章目录 1.为什么后端要进行数据校验? 2.怎么使用数据校验?(要添加对应依赖) 实现对手机号码的数据校验: 入参对象包含集合时,怎么对集合中的每个属性进行校验 1.为什么后端要进行数据校验? 如果 ...

  2. SpringBoot @Validated注解实现参数校验

    1. 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量 ...

  3. SpringBoot——服务端数据校验

    Spring Validator和Hibernate Validator是两套Validator,可以混着用,这里我们用Hibernate Validator 一.添加依赖: 添加依赖的时候注意不要添 ...

  4. Validated数据校验,看这一篇就够了

    目录 1 介绍 1.1 什么是数据校验 1.2 Java提供的数据校验工具 1.3 @Validated和@Valid的区别 1.4 依赖导入 1.5 常用数据校验注解 2 使用 2.1 校验实体类 ...

  5. java分组校验_SpringBoot @Validated注解实现参数分组校验的方法实例

    前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. org.springframework.bo ...

  6. springboot中hibernate validator校验模式,分组校验,自定义校验

    检验模式 上面例子中一次性返回了所有验证不通过的集合,通常按顺序验证到第一个字段不符合验证要求时,就可以直接拒绝请求了.Hibernate Validator有以下两种验证模式: 普通模式(默认是这个 ...

  7. springmvc(四) springmvc的数据校验的实现

    so easy~ --WH 一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端 ...

  8. springboot后端数据校验以及异常处理

    文章目录 常用校验工具包 1.package javax.validation.constraints 包 2.package org.hibernate.validator.constraints; ...

  9. 如何优雅的处理异常?SpringBoot全局异常与数据校验

    要思考的问题 在现在的前后端交互中,通常都规范了接口返回方式,如返回的接口状态(成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,因此,如果想做全局异常,并且异常发生后 ...

最新文章

  1. UVA10003 切木棍 Cutting Sticks(区间DP、细节)
  2. 35岁不是程序员的坎儿,看不清楚这件事才是!
  3. linux下进制是如何转换?
  4. SVG 动画实现弹性的页面元素效果
  5. mathematica在linux上运行,Mathematicamatlab的linux版的安装
  6. 使用ElasticSearch进行近实时索引
  7. 【Alpha阶段】第一次Scrum Meeting
  8. C语言 第五章 选择结构 答案,c语言第五章 选择结构程序设计(习题册答案).doc
  9. oracle 存long,ORACLE中LONG类型字段的存取
  10. java压缩图片等比缩放_java对图片进行压缩和resize缩放的方法
  11. 2 年 6 个月 11 天,外包到阿里的修仙之路!| 原力计划
  12. Nginx+PHP(FastCGI)环境搭建
  13. Unicode -- 从code point到UTF16的计算方法
  14. 如何用程序哄老婆开心
  15. powerdns 安装部署备忘
  16. 基于机智云的智能家用窗户窗帘控制及物联网系统
  17. Python While循环与break语句_加工零件
  18. 【linux服务器】使用csdn云主机的体验与问题
  19. mysql联合唯一索引可以有多个吗_mysql可以设置联合唯一索引吗?
  20. 图像处理—数据集的构建

热门文章

  1. 【.NET】C#中遍历各类数据集合的方法
  2. SQL报错:无效的列索引
  3. 湘橙网超值积分兑换  让消费更过瘾
  4. 对抗性攻击_对抗互操作性
  5. python可以编什么发型,长发编什么发型好看 2017—2018唯美长发编发
  6. Clickhouse数据库引擎
  7. Vue基础案例-成绩显示
  8. LeetCode·312.戳气球·动态规划
  9. (数据结构)[python](11)----链表与栈
  10. Jenkins实现自动化部署