目录 一、Hibernate-Validator 简介二、项目中为什么要用校验框架三、添加依赖四、看一个入门级案例五、常用注解六、使用groups的校验 一、Hibernate-Validator 简介 hibernate-
hibernate-validator
是Hibernate
项目中的一个数据校验框架,它能够将数据校验从业务代码中脱离出来,增加代码可读性,同时也让数据校验变得更加方便、简单。
官网地址:http://hibernate.org/validator/documentation
Java程序开发中,当你要处理一个程序的业务逻辑时,请求参数的数据校验是必须要处理的。当请求参数格式不正确的时候,需要程序监测到,并且返回对应的错误提示,以此来达到数据校验的目的。对于前后端分离开发过程中,数据校验还需要返回对应的状态码和错误提示信息。
org.hibernate.validator hibernate-validator
如果使用了SpringBoot
,则不需要引用任何依赖,因为spring-boot-starter-WEB
包中已经包含了Hibernate-Validator
依赖。
现有一个实体类
@Data@AllArgsConstructor@NoArgsConstructorpublic class StudentPo { @NotBlank(message = "用户名不能为空") private String name; @NotBlank(message = "邮箱不能为空") private String email;}
POST接口控制器
POST请求必须要加@Valid
// 注意:@Valid 不加这个注解,@NotBlank注解不生效@RestControllerpublic class StudentPoController { @RequestMapping(value = "/addStudent", method = RequestMethod.POST) public String addStudent(@Valid @RequestBody StudentPo student){ System.out.println("student = [" + student + "]"); return "ok"; }}
用postman测试
这种参数校验出现的异常,我们可以用全局异常处理类处理
@ControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody public ResultEntity handleBindException(MethodArgumentNotValidException ex) { FieldError fieldError = ex.getBindingResult().getFieldError(); return ResultEntity.faill(211, fieldError.getDefaultMessage(), null); }}@Data@AllArgsConstructor@NoArgsConstructorpublic class ResultEntity { private Integer code; private String message; private T data; public static ResultEntity faill(Integer code, String msg, T t) { return new ResultEntity(code, msg, t); }}
再次用postman测试
外加一个GET接口的控制器的写法
// Get请求需要在类上添加@Validated@RestController@Validatedpublic class StudentController { @RequestMapping(value = "/addStudent1",method = RequestMethod.GET) public String addStudent1(@NotBlank(message = "name不能为空") String name){ System.out.println("name = [" + name + "]"); return "ok addStudent1"; }}
注解 | 说明 | 用法 | 例子 |
---|---|---|---|
@Nul | 被注释的元素必须为 null | ||
@NotNull | 被注释的元素必须不为 null | @NotNull 用在基本类型上 | |
@AssertTrue | 被注释的元素必须为 true | ||
@AssertFalse | 被注释的元素必须为 false | ||
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 | ||
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 | ||
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 | ||
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 | ||
@Size(max, min) | 被注释的元素的大小必须在指定的范围内,元素必须为集合,代表集合个数 | ||
@Pattern(regexp = ) | 正则表达式校验 | ||
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 | ||
@Past | 被注释的元素必须是一个过去的日期 | ||
@Future | 被注释的元素必须是一个将来的日期 | ||
被注释的元素必须是电子邮箱地址 | |||
@Length(min=, max=) | 被注释的字符串的大小必须在指定的范围内,必须为数组或者字符串,若微数组则表示为数组长度,字符串则表示为字符串长度 | ||
@NotEmpty | 被注释的字符串的必须非空 | @NotEmpty 用在集合类上面 | |
@Range(min=, max=) | 被注释的元素必须在合适的范围内 | ||
@NotBlank | 被注释的字符串的必须非空 | @NotBlank 用在String上面 | |
@URI | 字符串是否是一个有效的URL |
注意:
1.@NotNull:不能为null,但可以为empty(“”," “,” “)
2.@NotEmpty:不能为null,而且长度必须大于0 (” “,” ")
3.@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0(“test”) 即:必须有实际字符
1、情景说明
同一个对象要复用,比如UserDTO
在更新时候要校验userId
,在保存的时候不需要校验userId
,在两种情况下都要校验username
,那就用上groups
了:
先定义groups的分组接口Create和Update
import javax.validation.groups.Default;public interface Create extends Default {}import javax.validation.groups.Default;public interface Update extends Default{}
再在需要校验的地方@Validated声明校验组
@PostMapping("/update/groups") public RspDTO update(@RequestBody @Validated(Update.class) UserDTO userDTO) { userService.updateById(userDTO); return RspDTO.success(); }
在DTO中的字段上定义好groups = {}的分组类型
@Datapublic class UserDTO implements Serializable { private static final long serialVersionUID = 1L; @NotNull(message = "用户id不能为空", groups = Update.class) private Long userId; @NotBlank(message = "用户名不能为空") @Length(max = 20, message = "用户名不能超过20个字符", groups = {Create.class, Update.class}) @Pattern(regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$", message = "用户昵称限制:最多20字符,包含文字、字母和数字") private String username; @NotBlank(message = "手机号不能为空") @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误", groups = {Create.class, Update.class}) private String mobile; private String sex; @NotBlank(message = "联系邮箱不能为空") @Email(message = "邮箱格式不对") private String email; private String passWord; @Future(message = "时间必须是将来时间", groups = {Create.class}) private Date createTime;}
来源地址:https://blog.csdn.net/weixin_45080272/article/details/128413908
--结束END--
本文标题: Hibernate-Validator(数据校验框架)
本文链接: https://www.lsjlt.com/news/372643.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-03
2024-04-03
2024-04-01
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0