@NotNull 等注解的简单使用
springboot 2.3.0 以后不会自动引入jar包,所以要添加以下maven
2.3以前则不需要引入maven包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
注册一个账号, 有账号+密码
前端会做一个判空,但是后端同时也要做一个判空,防止url直接访问
这时后端的代码通常是:
if(name!=null){return "账号不能为空,请重新输入";
}
else if(password!=null){return "密码不能为空,请重新输入";
}
这样就会显得特别low,而且极不美观
这时候就要用到一个注解@NotNull
简单举例说明:
@Data
public class UserInfo {@NotNull(message = "姓名不能为null")private String name;@Max(value = 30,message = "年龄不能超过30")private Integer age;private Integer password;private String sex;
}
Controller层:
简单举例说明
@RestController
public class TestController {@RequestMapping("test1")public Object test1(@Valid @RequestBody UserInfo userInfo,BindingResult result){//判断有没有异常错误,如果有则返回默认消息if (result.hasErrors()){String defaultMessage = result.getFieldError().getDefaultMessage();return defaultMessage;}//打印一下数据结构System.out.println(userInfo); //如果没有错误,返回注册成功return "注册成功";}}
用postMan 传入json 参数,name有值,年龄超过30岁
返回我们的设定
name 为null 同理,会按顺序判断!
但是问题又来了,难道我们每个Controller层的方法里面都要写一个判断方法?
当然不,这时候就要用到全局异常类了
起一个类
@ControllerAdvice
public class ControllerException {@ResponseBody@ExceptionHandler(MethodArgumentNotValidException.class)public Object handleValidException(MethodArgumentNotValidException e) {//将错误信息返回给前台return e.getBindingResult().getFieldError().getDefaultMessage();}
}
为了有所区分,写下另一个访问方法
@RequestMapping("test2")public Object test1(@Valid @RequestBody UserInfo userInfo){System.out.println(userInfo);return "注册成功";}
这时候我们传入参数
到此结束,再也不用写一堆各种判空了
附上 部分注解
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
二次更新:所有的Controller 都写这样的代码就要封装成异常类
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;
/*** @author :lsy* @date :Created in 2020/7/23 10:13* @modified By:*/
@ControllerAdvice
public class ControllerException {private final static String EXCEPTION_MSG_KEY = "Exception message : ";@ResponseBody@ExceptionHandler(MethodArgumentNotValidException.class)public Object handleValidException(MethodArgumentNotValidException e) {//日志记录错误信息// log.error(Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());//将错误信息返回给前台// return BaseResult.fail(500, Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());return e.getBindingResult().getFieldError().getDefaultMessage();}
}
不需要写BindingResult 也可以返回message
@RequestMapping("test2")public Object test1(@Valid @RequestBody UserInfo userInfo){System.out.println(userInfo);return "注册成功";}
@NotNull 等注解的简单使用相关推荐
- 在Spring项目中使用@Scheduled注解定义简单定时任务
如题所示,有时候我们需要在Web项目中配置简单的定时任务,而且因为任务并不复杂不想使用定时调度框架(PS:Quartz.ActiveMQ .Kafka等),这时就可以考虑使用@Scheduled注解来 ...
- java excel 注解_Java注解--实现简单读取excel
实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Retentio ...
- ajax注解解决中文乱码,基于注解的简单MVC框架的实现,以及jquery,prototype,ajax传输乱码问题的一点解决方法...
1:基于注解的简单MVC框架的实现 效果:1:用户只需要定义一些普通的java类来做为M层,也就是STRUTS的action类,该类里包含1到 N个控制方法,每个方法需要的form数据,由注解@Act ...
- java 读取 excel 注释_java利用注解实现简单的excel数据读取
搜索热词 实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Ret ...
- 【Java 注解】自定义注解 ( 使用注解实现简单测试框架 )
文章目录 一.定义注解 二.使用注解 三.解析注解 在 [Java 注解]自定义注解 ( 注解属性定义与赋值 ) 博客中讲解了 注解属性 ; 在 [Java 注解]自定义注解 ( 元注解 ) 博客中讲 ...
- java 封装优化工具_利用Java注解的简单封装的一次优化
悟红尘:zhuanlan.zhihu.com 在我们的项目中和后台的通信的时候,为了防止别人截获并篡改信息,于是决定启用一套自己验签规则,那就是将所有属性的值拼接起来进行SHA256签名,在这个字符 ...
- @configurationproperties注解的使用_SpringBoot常用注解的简单理解
不定时更新... 文章目录 Spring容器 JavaBean POJO @Autowired @Controller @Resource @RestController @Service @Repo ...
- SpringAOP Aspect注解实现简单日志功能
SpringAOP实现简单日志功能 AOP(Aspect Oriented Programming):面向切面编程,Spring框架的重要组成部分,利用AOP我们可以将一些公用的业务逻辑部分抽取出来, ...
- SpringBoot整合AOP + 自定义注解实现简单的权限验证
1.简介 主要通过自定义注解,使用SpringAOP的环绕通知拦截请求,判断该方法是否有自定义注解,然后判断该用户是否有该权限,这里做的比较简单. 2.项目搭建 这里是基于SpringBoot的,对于 ...
最新文章
- Python 标准库之 os (获取当前目录、读取/设置环境变量、重命名文件、运行shell命令、创建/删除/查看目录文件、判断目录/文件/存在、获取绝对路径、获取文件名、获取换行符、获取路径分隔符)
- JSON快速转C#实体类
- 如何使VS2008 调试网站的根目录和IIS调试的一致?
- python time localtimeq获取准确时间_Python时间模块datetime、time、calendar的使用方法
- 走在前沿的弄潮儿,怎能不会Git的那些奇技淫巧
- BigDataMini导论
- python locust 能压测数据库_python locust 性能测试:HOOKS钩子方法
- OutOfMemoryError:无法创建新的本机线程–问题神秘化
- 架构设计 例子和实践
- 查看openssh版本_OpenSSH命令注入漏洞复现(CVE202015778)
- 博弈——NimSG函数函数(hdu1848)
- k8s之根据tag发布spring boot项目
- TI DSP 28335 自学之路,到此止步
- 计算机电子管与晶体管区别,电子管、晶体管与集成电路 扫盲
- 一文教你高效画出技术架构图
- java bitset_Java1.8-BitSet源码分析
- C#调用AForge实现摄像头录像
- web-页面body添加背景图片
- Mac/Linux查看内网ip与访问公网的ip地址
- 响应式移动端框架_简单,响应式,移动优先导航