文章目录

  • Spring Core JSR305非空验证
  • Lombok 非空验证
  • Spring Mvc JSR 303 非空校验
    • 导入依赖
    • Controller
    • 测试使用

Spring Core JSR305非空验证

JSR305是一种规范,利用编辑器例如IDEA来通知是否为空的缺陷,类似JSR303(Bean Validation规范)通过注解的方式。

@SpringBootTest
public static class TestSpringJsr305 {@Testpublic void test(){testNonNull(null);}@NonNullpublic static String testNonNull(@NonNull String name){return null;}
}

idea提示如下:

Lombok 非空验证

lombok中的@NonNull不仅在代码编辑器中可以检查null,还会在运行中抛出异常。

@SpringBootTest
public static class TestLombok {@Testpublic void test(){testNonNull(null);}public static void testNonNull(@lombok.NonNull String name){System.out.println(name);}
}

打印如下:

java.lang.NullPointerException: name is marked non-null but is nullat com.terry.test.TestNull$TestLombok.testNonNull(TestNull.java:43)

Spring Mvc JSR 303 非空校验

JSR 303(Bean Validation) 是Java EE 6中的一项规范。Hibernate Validator是JSR303中的实现。平时校验表单参数,写判断会比较冗余,使用注解可以更加简洁,并且易于维护。

JSR 303 中的注解

@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

Hibernate Validator 附加的注解
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

导入依赖

springboot 对jsr303 封装了starter spring-boot-starter-validation ,实际上底层引入了hibernate-validator

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Controller

@RestController
public class TestController {@Datapublic static class User {@NotNull(message = "名称不能为空")private String name;private Integer age;}@RequestMapping("/add")public String add (@Validated @RequestBody User user, BindingResult bindingResult){if (bindingResult.hasErrors()) {// 返回第一个错误List<ObjectError> allErrors = bindingResult.getAllErrors();return allErrors.get(0).getDefaultMessage();}return "添加成功!";}
}

测试使用

SpringBoot 空指针处理总结相关推荐

  1. SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)

    SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null) 参考文章: (1)SpringBoot集成Quartz(解决@Autowired空指针Nu ...

  2. springboot获取getBean方法以及ApplicationContext空指针问题解决

    springboot获取getBean方法以及ApplicationContext空指针问题解决 参考文章: (1)springboot获取getBean方法以及ApplicationContext空 ...

  3. eclipse spring mysql,eclipse环境下的springboot框架+mybatis访问MySQL报错空指针

    "/")public classTestController { @RequestMapping("/login")publicString login() { ...

  4. javamailsender注入失败_关于SpringBoot使用Redis空指针的问题(不能成功注入的问题)...

    自己的一个小项目使用redis在一个类里可以注入成功,而在另一个类以却不能注入成功 不多bb直接上代码 package com.common.utils; import org.springframe ...

  5. springboot项目导入Redis依赖后在测试类中无法使用(RedisTemplate),报空指针

    问题描述: 在springboot项目导入Redis依赖后,在测试类中无法使用(RedisTemplate),报空指针 前提是都已经添加了注入注解: 添加了注解后还是会报错: 解决方法: 在启动类中加 ...

  6. springboot整合redis,redisTemplate 空指针

    今天创建了一个springboot项目,想整合一下redis数据库,结果redisTemplate一直未空指针异常,最后总结:出现在的原因有两点 1.对@Autowired和@Resource不熟 2 ...

  7. springboot中测试类使用@Autowired空指针处理方案

    1.问题说明以及原因分析 2.处理方案 1.说明以及原因分析 接手项目中,需要新增功能,想连接持久层进行数据测试,原来的项目中没有进行单元测试类,手动进行创建,发现注入mapper报空指针.创建过程如 ...

  8. springboot 对象 空指针_C++ this指针的理解和作用

    C++ 程序到 C 程序的翻译  要想理解 C++ 的 this 指针,我们可以先把下面的 C++ 代码转换成 C 代码:C 语言是没有类定义 class 关键词,但是有跟 class 类似的定义,那 ...

  9. SpringBoot 注入的@service为空,运行时报空指针

    解决方案一: @Component public class ServerHandler extends IoHandlerAdapter {@Autowiredprotected HealthDat ...

最新文章

  1. 【 MATLAB 】MATLAB 实现模拟信号采样后的重建(三)应用三次样条函数spline实现内插
  2. greenfoot推箱子怎么做_地推需要怎么准备,才能保证地推做最有效
  3. Mysql短连接风暴
  4. 实战爬虫:python爬虫学习笔记之爬取大前端网站
  5. C#CAD二次开发 非模态对话框切换窗口焦点
  6. 树莓派远程监控+运动目标检测
  7. FPS游戏:实现GDI方框透视
  8. android 模拟物品移动
  9. 深入理解G1垃圾收集器
  10. IOS引入百度统计热力图崩溃
  11. 多维尺度分析(Multidimensional scaling,MDS)及SPSS实现
  12. 4246 奶牛的身高
  13. 笔记本计算机的连接无线网络连接,笔记本电脑连接wifi的方法步骤
  14. python可以在手机上学吗_Python 读书
  15. 病毒宏基因组学(Meta-virome)
  16. 图像处理:基于cv2.inpaint()图像修补
  17. Sam-ba 2.12在win7上的安装
  18. 【CNC——第8篇】PMAC 与 PewinPro2 建立通讯
  19. vue+element 将密码输入框的小圆点显示为星号
  20. 经典Seq2Seq与注意力Seq2Seq模型结构详解

热门文章

  1. 云演 CTF Web题型 lfi 文件包含
  2. Ajax--请求的基本操作 设置请求参数
  3. web自动化测试-绕过验证码登录
  4. 电视服务器绑上电池信号强吗,路由器上面绑电池,可以增加WiFi信号,真的有作用吗?...
  5. NOIP提高组1580~1590集合答案
  6. ResNet结构详解
  7. oracle重复名字,oracle中的名字(names for oracle)
  8. 文件下载图片或者视频及解决保存文件时中文乱码问题
  9. node安装不能正常使用 Error: ENOENT: no such file or directory, mkdir ‘D:\‘
  10. 安装Android应用至SD卡