解放生产力:Spring Boot的注解校验
关于对象入参的校验,我们可能第一个想到的就是在Controller层或者Service层增加很多if else的判断,如:
if (user.getPassword() == "") {
throw new BusinessException("password can not be empty!");
}
if (user.getRank() > 30 || user.getRank() <= -1) {
throw new BusinessException("The value of the rank should be in valid range");
}
// other codes
这样一路写下来非常容易心态暴躁,时间久了也会越来越冗余。Spring Boot提供了一个通过注解就能实现的字段验证方法。常用的注解如下:
//被注释的元素必须为null
@Null
//被注释的元素不能为null
@NotNull
//被注释的元素必须为true
@AssertTrue
//被注释的元素必须为false
@AssertFalse
//被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Min(value)
//被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Max(value)
//被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMin(value)
//被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMax(value)
//被注释的元素的大小必须在指定的范围内。
@Size(max,min)
//被注释的元素必须是一个数字,其值必须在可接受的范围内
@Digits(integer,fraction)
//被注释的元素必须是一个过去的日期
@Past
//被注释的元素必须是一个将来的日期
@Future
//被注释的元素必须符合指定的正则表达式。
@Pattern(value)
//被注释的元素必须是电子邮件地址
@Email
//被注释的字符串的大小必须在指定的范围内
@Length
//被注释的字符串必须非空
@NotEmpty
//被注释的元素必须在合适的范围内
@Range
而我们选出最高频的三个:
@NotNull用于Integer Double等类型
@NotBlank 用于String字符串
@NotEmpty 用于集合类或者数组。
这些验证注解都写在Bean对象,也就是pojo或者dao层文件中,下面举个栗子:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyArticle {
// 文章ID
private int id;
// 文章标题
@NotBlank(message = "文章标题不能是空")
private String title;
// 文章作者
@NotBlank(message = "作者名不能是空")
private String author;
// 文章内容
@NotBlank(message = "文章内容不能是空")
private String content;
// 文章分类ID
@NotNull(message = "分类ID不能为空")
private int categoryId;
// 标签
@NotEmpty(message = "标签不能为空")
private List<String> tags;
// 创建时间
private int created;
// 修改时间
private int modified;
}
然后在对应的Controller接口中需要被验证的入参上增加一个注解@Validated即可,然后通过BindingResult对象来获取判断后的处理结果:
@PostMapping("/article")
@UserLoginToken
public Result add(@Validated @RequestBody MyArticle myArticle, BindingResult bindingResult) {
try {
if (bindingResult.hasErrors()) {
return new Result("400", "新发布文章失败!", bindingResult.getFieldError().getDefaultMessage(), "Bad Params", null);
}
boolean addResult = articleService.add(myArticle);
if (addResult) {
return new Result("200", "新发布文章成功!", "", "", null);
} else {
return new Result("200", "新发布文章失败!", "Oops, something weird", "10010", null);
}
} catch (Exception e) {
return new Result("400", "新发布文章失败!", e.getMessage(), "Bad Params", null);
}
}
一般情况下就结束了,但是等一下,你如果和我一样都是使用的高版本的Spring Boot,也就是2.3.x系列,那么以上增加的校验数据的注解会失效。这是由于高版本的Spring Boot需要单独手动安装Validate依赖包,在pom.xml文件中增加如下依赖:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.17.Final</version>
<scope>compile</scope>
</dependency>
安装好之后,重启项目,一切搞定!
解放生产力,从善用注解校验开始吧!
解放生产力:Spring Boot的注解校验的更多相关文章
- Spring Boot常用注解总结
Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...
- spring boot常用注解使用小结
1.@RestController和@RequestMapping注解 4.0重要的一个新的改进是@RestController注解,它继承自@Controller注解. 4.0之前的版本,Sprin ...
- spring boot 常用注解
@RestController和@RequestMapping注解 4.0重要的一个新的改进是@RestController注解,它继承自@Controller注解.4.0之前的版本,spring M ...
- Spring Boot 常用注解汇总
一.启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documen ...
- 3个Spring Boot核心注解,你知道几个?
Spring Boot 核心注解讲解 Spring Boot 最大的特点是无需 XML 配置文件,能自动扫描包路径装载并注入对象,并能做到根据 classpath 下的 jar 包自动配置. 所以 S ...
- Spring Boot@Component注解下的类无法@Autowired的问题
title: Spring Boot@Component注解下的类无法@Autowired的问题 date: 2019-06-26 08:30:03 categories: Spring Boot t ...
- Spring boot 基于注解方式配置datasource
Spring boot 基于注解方式配置datasource 编辑 Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionF ...
- 【SpringBoot】15. Spring Boot核心注解
Spring Boot核心注解 1 @SpringBootApplication 代表是Spring Boot启动的类 2 @SpringBootConfiguration 通过bean对象来获取配置 ...
- spring boot纯注解开发模板
简介 spring boot纯注解开发模板 创建项目 pom.xml导入所需依赖 点击查看源码 <dependencies> <dependency> <groupId& ...
随机推荐
- Java基础高级篇 NIO
nio模型与io模型的对比 netty 是什么 怎么使用
- Azure Application Gateway(一)对后端 Web App 进行负载均衡
一,引言 今天,我们学习一个新的知识点-----Azure Application Gateway,通过Azure 应用程序网关为我么后端的服务提供负载均衡的功能.我们再文章头中大概先了解一下什么是应 ...
- C#图解教程(第四版)—03—类和继承
1 使用基类的引用 派生类的实例由 基类的实例 加上 派生类 新增的成员 组成. 派生类的 引用 指向整个类对象,包括基类部分 重点:使用对象的 基类部分的引用 来访问对象 (父 ...
- mysql基础测试题
mysql基础测试题:https://www.cnblogs.com/wupeiqi/articles/5729934.html 如何创建表? 就这样类推?如何提取我们想要的元素呢? 综合提取呢?
- Mac中的垃圾文件的清理
一 前言 最近发现mac的存储空间不够了,看一下系统的存储空间如下图所示,这个其他占了160+G的存储空间,那么这个其他到底包含什么东西呢?在网上查了很久,找到一种比较认可的说法是这样的: 不同Mac ...
- MQC集群配置错误
这个错误说明配置里面,MQC环境配置错了 运行war包时会读到本地的配置system-config.propertites文件
- IOS 单例崩溃分析 2014-12-10 15:46:36
单例模式是常用的模式,但是在单例应用中偶或引发崩溃让人匪夷所思.其实真的是单例引起的吗?未必.但是现象都指向了是单例引起的.今天我亲身经历了看似崩溃在单例上的一个例子,但实则不是,今天做个记录用于今后 ...
- 【算法•日更•第五十四期】知识扫盲:什么是operator?
▎前言 这个东西和迭代器长的很像,但是比迭代器常见的多. 今天就来浅谈operator. ▎定义 operator是C#.C++和pascal的关键字,它和运算符一起使用,表示一个运算符函数,理解时应 ...
- python3 - selenium 添加有账号密码的代理
from selenium import webdriver import string import zipfile # 打包Google代理插件 def create_proxyauth_exte ...
- java class类和object类
Class类 介绍 Java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息 Java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类( ...