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 等注解的简单使用相关推荐

  1. 在Spring项目中使用@Scheduled注解定义简单定时任务

    如题所示,有时候我们需要在Web项目中配置简单的定时任务,而且因为任务并不复杂不想使用定时调度框架(PS:Quartz.ActiveMQ .Kafka等),这时就可以考虑使用@Scheduled注解来 ...

  2. java excel 注解_Java注解--实现简单读取excel

    实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Retentio ...

  3. ajax注解解决中文乱码,基于注解的简单MVC框架的实现,以及jquery,prototype,ajax传输乱码问题的一点解决方法...

    1:基于注解的简单MVC框架的实现 效果:1:用户只需要定义一些普通的java类来做为M层,也就是STRUTS的action类,该类里包含1到 N个控制方法,每个方法需要的form数据,由注解@Act ...

  4. java 读取 excel 注释_java利用注解实现简单的excel数据读取

    搜索热词 实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Ret ...

  5. 【Java 注解】自定义注解 ( 使用注解实现简单测试框架 )

    文章目录 一.定义注解 二.使用注解 三.解析注解 在 [Java 注解]自定义注解 ( 注解属性定义与赋值 ) 博客中讲解了 注解属性 ; 在 [Java 注解]自定义注解 ( 元注解 ) 博客中讲 ...

  6. java 封装优化工具_利用Java注解的简单封装的一次优化

    悟红尘:​zhuanlan.zhihu.com 在我们的项目中和后台的通信的时候,为了防止别人截获并篡改信息,于是决定启用一套自己验签规则,那就是将所有属性的值拼接起来进行SHA256签名,在这个字符 ...

  7. @configurationproperties注解的使用_SpringBoot常用注解的简单理解

    不定时更新... 文章目录 Spring容器 JavaBean POJO @Autowired @Controller @Resource @RestController @Service @Repo ...

  8. SpringAOP Aspect注解实现简单日志功能

    SpringAOP实现简单日志功能 AOP(Aspect Oriented Programming):面向切面编程,Spring框架的重要组成部分,利用AOP我们可以将一些公用的业务逻辑部分抽取出来, ...

  9. SpringBoot整合AOP + 自定义注解实现简单的权限验证

    1.简介 主要通过自定义注解,使用SpringAOP的环绕通知拦截请求,判断该方法是否有自定义注解,然后判断该用户是否有该权限,这里做的比较简单. 2.项目搭建 这里是基于SpringBoot的,对于 ...

最新文章

  1. Python 标准库之 os (获取当前目录、读取/设置环境变量、重命名文件、运行shell命令、创建/删除/查看目录文件、判断目录/文件/存在、获取绝对路径、获取文件名、获取换行符、获取路径分隔符)
  2. JSON快速转C#实体类
  3. 如何使VS2008 调试网站的根目录和IIS调试的一致?
  4. python time localtimeq获取准确时间_Python时间模块datetime、time、calendar的使用方法
  5. 走在前沿的弄潮儿,怎能不会Git的那些奇技淫巧
  6. BigDataMini导论
  7. python locust 能压测数据库_python locust 性能测试:HOOKS钩子方法
  8. OutOfMemoryError:无法创建新的本机线程–问题神秘化
  9. 架构设计 例子和实践
  10. 查看openssh版本_OpenSSH命令注入漏洞复现(CVE202015778)
  11. 博弈——NimSG函数函数(hdu1848)
  12. k8s之根据tag发布spring boot项目
  13. TI DSP 28335 自学之路,到此止步
  14. 计算机电子管与晶体管区别,电子管、晶体管与集成电路 扫盲
  15. 一文教你高效画出技术架构图
  16. java bitset_Java1.8-BitSet源码分析
  17. C#调用AForge实现摄像头录像
  18. web-页面body添加背景图片
  19. Mac/Linux查看内网ip与访问公网的ip地址
  20. 响应式移动端框架_简单,响应式,移动优先导航

热门文章

  1. 一篇文章让你理清 【硬盘类型】 HDD、SSD、SSHD 和 【硬盘接口类型】 ATA、IDE、SATA、SCSI、SAS
  2. Simulink永磁同步电机控制仿真:过调制及电流重构
  3. 快用苹果助手好不好-黑苹果
  4. win7计算机策略可以重置,Win7系统中将组策略恢复到最初原始状态的方法详解
  5. K3s集群搭建及配置
  6. 使用iframe页面父子传参数
  7. 北境之地服务器没有响应,《北境之地》常见问题解决方法
  8. 全球及中国运动型自行车行业消费调研与市场潜力分析报告2022版
  9. 8、electron-vue安装ssh2
  10. Kafka Streams的容错机制