使用@Validated校验数据(除数据库做辅助)
一、controller层
/**
* 使用@Validated来进行校验
* @author HuangJingNa
* @date 2019年12月23日 下午6:02:20
*
* @param validatedTestParam
* @return
*/
@GetMapping("validated_test")
@NotCheckOnline
public Object validatedTest(@Validated ValidatedTestParam validatedTestParam) {
return "校验完成";
}
二、controller层传递的参数封装类
package cn.kooun.pojo.params;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/**
* 通过注解校验数据
* @author HuangJingNa
* @date 2019年12月23日 下午6:41:00
*
*/
@Getter
@Setter
@ToString
public class ValidatedTestParam {
@NotBlank(message = "姓名不能为空")
@Pattern(regexp = ".*{1,50}", message = "姓名不合法")
private String name;
@NotBlank(message = "学号不能为空")
@Pattern(regexp = "[\\w]{6,20}", message = "学号不合法")
private String number;
@NotNull(message = "年龄不能为空")
@Min(value = 1, message = "年龄不合法")
@Max(value = 200, message = "年龄不合法")
private Integer age;
@NotNull(message = "性别不能为空")
@Min(value = 0, message = "性别不合法")
@Max(value = 1, message = "性别不合法")
private Integer sex;
}
三、全局异常处理
package cn.kooun.core.exception;
import javax.servlet.http.HttpServletRequest;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.kooun.common.result.Result;
import cn.kooun.common.result.ResultUtils;
import cn.kooun.pojo.exception.OffLineException;
/**
* 全局异常处理
* @author HuangJingNa
* @date 2019年12月21日 下午3:46:19
*
*/
@ControllerAdvice//标记此类为全局异常拦截器
public class GlobalExceptionHandler {
/**
* 系统异常处理,如404、500
* @author HuangJingNa
* @date 2019年12月21日 下午3:48:45
*
* @return
* @throws Exception
*/
@ExceptionHandler(value = Exception.class)//监听对应的异常对象
@ResponseBody
public Object defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception{
//控制台输出错误信息
e.printStackTrace();
if(e instanceof OffLineException) {
return ResultUtils.error("登录失效,请重新登录~", Result.JUMP_LOGIN);
}
return ResultUtils.error("系统繁忙,请联系管理员~");
}
/**
* 自定义异常处理@Validated抛出的数据校验
* @author HuangJingNa
* @date 2019年12月21日 下午3:54:32
*
* @param req
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = BindException.class)
@ResponseBody
public Object defaultArithmeticHandler(HttpServletRequest req, BindException e) throws Exception{
//控制台输出错误信息
e.printStackTrace();
return ResultUtils.error(
e.getBindingResult().getFieldError().getDefaultMessage(),
"BindException");
}
}
注:使用@Validated注解来校验数据,随机触发校验,不按从上往下的变量进行校验,所以提示也是乱的(可能是使用多线程来处理的)
且在此校验完成后,还要进入service层再进行有关数据库做辅助的数据校验,不利于用户体验,但是提高了开发效率
使用@Validated校验数据(除数据库做辅助)的更多相关文章
- php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中
php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中 1.phalcon框架的安装: phalcon框架在windows本地安装可以利用wamp软件,安装之后可以查看对应 ...
- django基础之day09,Forms组件在程序中做了哪些事? 校验数据、渲染标签、展示信息
******************************* Forms组件 *************************************************** Forms组件在 ...
- springMVC(5)---导入excel文件数据到数据库
springMVC(5)---导入excel文件数据到数据库 上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库.上一篇链接:springMVC(4 ...
- 大数据高性能数据库Redis在Windows上的使用教程
Redis学习笔记----Redis在windows上的安装配置和使用 Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括s ...
- 大数据量数据库设计与优化方案(SQL优化)
转自:http://blog.sina.com.cn/s/blog_6c0541d50102wxen.html 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的 ...
- 使用ModelForm校验数据唯一性
在设计模型类的时候,将指定字段设置unique=true属性,可以保证该字段在数据库中的唯一性. 使用ModelForm可以将指定模型类快速生成表单元素.在提交数据后,使用is_valid()校验时, ...
- Ajax实现xml文件数据插入数据库(二)--- ajax实现与jsp的数据交互。
在上一篇文章中我们成功得到了重新组织后的数据,接下来需要做的便是将数据插入到数据库中了.在与数据库打交道的过程中有一些方法是普遍的,我们将这些通用方法封装到一个DbUtil类中,以便复用,封装好的Db ...
- 读取Execl表数据 导入数据库
不知不觉博客园园林都两年多了,我是今年毕业的应届生,最近公司项目需要改动,很多的数据需要导入,很多的实体类需要些.考虑到这些问题自己写了两个winform版的小工具,一个是读取Execl数据导入数据库 ...
- m_Orchestrate learning system---二十九、什么情况下用数据库做配置字段,什么情况下用配置文件做配置
m_Orchestrate learning system---二十九.什么情况下用数据库做配置字段,什么情况下用配置文件做配置 一.总结 一句话总结: 配置文件 开发人员 重置 数据库 非开发人员 ...
随机推荐
- NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)
错误信息: NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 错误背景:微服务不通过统一的nginx端口访问,能够正常请求接口并获取对应的响应.但是通过ngi ...
- Jetson AGX Xavier部署ORB_SLAM2(ROS)
1. 修改CMakeLists.txt Examples/ROS/ORB_SLAM2下的CMakeLists.txt 原 set(LIBS ${OpenCV_LIBS} ${EIGEN3_LIBS} ...
- 实现LNMP架构
LNMP简介 WEB资源类型: 静态资源:服务器端和客户端看到的是一样的 动态资源:服务器端放的是程序,客户端看到的是结果,并不是程序本身 和页面的静或者动没有关系 WEB相关语言 HTML JAVA ...
- Linux文件元数据和节点表结构
文件元数据 一块硬盘的分区可以认为有两部分组成,保存元数据的成为节点表,用来保存属性等. 元数据中有个小指针,指向数据存放的实际空间. 元数据(Metadata) 又称中介数据.中继数据,为描述数据的 ...
- python中实现格式化输入(史上最简单、最高效的实现方法,不借助任何模块)
今天我在写python作业时突然想到格式化输入一段文字,譬如只需读取输入的前几个字符就行,而不幸的是,python中的输入并没有c中的read().getchar()函数,于是我网上搜了一下,网上的解 ...
- java 内存可见性
java线程 -> 线程工作内存 -> 主物理内存 线程工作内存的原理是栈内是连续的小空间,寻址速度比堆快得多,将变量拷贝到栈内生成副本再操作 什么是重排序 代码指令可能并不是严格按照代码 ...
- nio DirectByteBuffer如何回收堆外内存
概述 使用了nio框架的应用,比如服务框架,利用nio建立长连接通信,他们会使用DirectByteBuffer来分配堆外内存,也就是本地直接内存,这个内存的回收不由gc直接维护,我们通常所说的gc, ...
- Stimulsoft报表工具中属性表达式设置属性表达式
Stimulsoft仪表工具实现所需的数据可视化和自己的信息图表.该产品能够应用必要的过滤器和排序,汇总数据,执行任何复杂度的计算.该产品的优势在于其多功能性-能够为您的业务,财务,销售,行业等任何领 ...
- Bootstrap Blazor 初体验
自微软去年发布blazor以来,我也一直关注着blazor的动态,从net core 3.1 到 net 5,从 server side 到 wasm client , 点点滴滴印证了 blazor ...
- Lucas(卢卡斯)定理模板&&例题解析([SHOI2015]超能粒子炮·改)
Lucas定理 先上结论: 当p为素数: \(\binom{ N }{M} \equiv \binom{ N/p }{M/p}*\binom{ N mod p }{M mod p} (mod p)\) ...