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. 网站优化中哪些设置会影响蜘蛛的抓取?对网站SEO产生什么影响?
  2. IROS 2017上,这些厂商将会给我们展示什么样的黑科技?
  3. L :WeChat Walk
  4. vue 子组件 调用、触发父组件中的方法
  5. Pytest+Allure+Jenkins接口自动化项目实战(一)
  6. 360容器平台监控实践
  7. linux 复制 链接文件,Linux硬链接、软连接和复制的区别
  8. 移动磁盘无法访问文件系统损坏资料找到的方案
  9. Linux移植wifi驱动
  10. win10 SystemParametersInfo 设置屏保 不好使_抖音网红屏保时钟软件(附使用教程)...
  11. 我对delphi调用第三方SDK的理解
  12. 转载:optparse模块OptionParser学习
  13. 浏览器无法显示网页解决方法
  14. 2010年美国计算机图书市场Part1
  15. R语言survival包Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、drop1函数计算cox回归模型自变量似然比检验值、删除冗余变量重新构建cox模型
  16. WIN10管理员权限设置、更改用户名被“拒绝访问”
  17. JAVA SE File下面的方法
  18. vue-cli3 接口api代理 308 Permanent Redirect
  19. Win10任务栏重启无数次都在转圈卡死解决方法(超级简单)
  20. x265源码分析 main函数 x265.cpp

热门文章

  1. 怎么制作HTML5页面让它适应电脑和手机的尺寸?
  2. 计算机无法显示关机,win7关机关不了一直显示正在关机的具体处理方法
  3. android7.1 -- Telephony 如何强制走非volte通话
  4. 跑步装备品牌排行榜:2022最值得买的几个跑步装备
  5. 26-Openwrt 端口转发 dmz upnp
  6. 记录unity制作2D游戏过程
  7. 小米手环 8参数 小米手环 8评测
  8. 如何解决winscp出现网络错误?
  9. CSS:padding和margin
  10. 微信理财通:社交与金融的无缝连接