注解的其他补充笔记
NotNull
、NotEmpty
、NotBlank
的区别
@NotNull
不能为 Null, 但是可以为空字符串(
""
)或者空白字符(" "
)一般用在
Integer
类型的基本数据类型的非空校验上,而且被其标注的字段可以使用@size
、@Max
、@Min
对字段数值进行大小的控制
@NotEmpty
不能为 Null, 且长度必须大于0, 可以为空白字符(
" "
), 一般用在集合类上或者数组上
@NotBlank
只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度必须大于 0即:必须有实际字符
不同情况下,三种注解的返回结果
注解 String s = null;
String s = "";
String s = " ";
String s = "Hello World"
@NotNull
false true
true
true
NotEmpty
false false true
true
NotBlank
false false false true
*** 在使用Validation验证框架时,要在控制器类的参数列表中对应DTO类的前面添加@Valid
注解,否则会不起作用,示例如下: **
package com.example.passport.controller;
import com.example.passport.pojo.dto.AdminAddNewDTO;
import com.example.passport.service.IAdminService;
import com.example.passport.web.JsonResult;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* @Date: 2022-12-31-14-55
* @Author: evan.lijun
* @description: The administrator manages the access control layer of the module
*/
@Validated
@RestController
@Api(tags = "1管理员管理模块")
@RequestMapping("/admins")
public class AdminController {
@Autowired
private IAdminService adminService;
/* ... ... */
@ApiOperation("添加账户")
@PostMapping("/add-admin")
@ApiOperationSupport(order = 101)
@PreAuthorize("hasAuthority('/ams/admin/add-new')")
// 因为参数列表的参数是一个被封装的类,为了使类中的validation框架起作用,需要添加@valid注解
// ↓↓↓↓↓↓ ↓↓↓↓↓↓
public JsonResult<Void> addNew(@Valid AdminAddNewDTO adminAddNewDTO) {
adminService.AddNew(adminAddNewDTO);
return JsonResult.ok();
}
}
最常用的校验注解
javax.validation.constraints.*;
注解 | 说明 |
---|---|
@Null /@NotNull | 限制元素只能/不能为Null |
@AssertTrue /@AssertFalse | 限制元素必须为true/false |
@Min(value) /@Max(value) | 限制元素必须为一个不小于/大于指定值的数字 |
@DecimalMin(value) /@DecimalMin(value) | 限制元素必须是一个数字,值必须大于/小于指定的值 |
@Size(max,min) | 限制字符长度必须在min 到max 的指定范围内(大于等于或小于等于) |
@Digits(integer,fraction) | 限制元素必须为一个小鼠,且整数部分的位数不能超过integer 、小数部分的位数不能超过fraction的在可接受的范围内 |
@Past | 限制元素(日期类型)必须是一个过去(已存在)的日期 |
@Future | 限制元素(日期类型)必须是一个将来(尚未到达)的日期 |
@Pattern(value) | 限制元素必须符合指定的正则表达式(注:该类型仅适用于字符串类型) |
@Email | 限制元素值为是电子邮件地址,也可以通过正则表达式和flag指定自定义的email |
@Length | 限制元素的大小必须在指定的范围内(一般用在String 类型) |
@NotEmpty | 限制字符串必须非空(不为null且不为空) |
@Range | 限制元素必须在合适的范围内(一般用在Integer 类型) |