Springboot集成validation校验API参数的合法性
前言:
validation主要用于校验用户提交的数据的合法性,比如字符长度,是否为空,密码是否符合规则,邮箱格式是否正确等等,市场上校验框架比较多,用的比较广泛的是hibernate-validator, 既支持国际化,也支持自定义校验类型的注解,这里简单的演示校验框架在Springboot中如何集成。
第一步:添加pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
第二步:添加实体类代码(注意:实体类中一定要加get/set方法,或lombok的@Data注解,否则controller中的register()方法拿到参数后无法赋值给User对象)
package com.ryi.rpcs.test; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.*; /** * 用户实体类 * https://www.jiagou1216.com */ @Data public class User { private Long id; @NotBlank @Length(min = 3, max = 10) private String username; @NotBlank @Email private String email; @NotBlank @Pattern(regexp = "^((13[0-9])|(15[^4,\\D])|(18[0,3-9]))\\d{8}$", message = "手机号格式不正确") private String phone; @Min(value = 18) @Max(value = 200) private int age; @NotBlank @Length(min = 6, max = 12, message = "昵称长度为6到12位") private String url; }
第三步:添加controller控制类
package com.ryi.rpcs.test; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; /** * 控制类 * * @author 架构师小跟班 */ @RestController @RequestMapping("/demo") public class DemoController { @PostMapping("/user") public String register(@Valid @RequestBody User user, BindingResult result) { if (result.hasErrors()) { FieldError fieldError = result.getFieldError(); String field = fieldError.getField(); String msg = fieldError.getDefaultMessage(); return field + ":" + msg; } System.out.println("success..."); return "success"; } }
第四步:使用postman测试,选择post方法,请求URL:localhost:8080/demo/user
拓展阅读:
常用的约束注解
@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 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
@URL(protocol=,host=, port=, regexp=, flags=) 被注释的字符串必须是一个有效的url
@CreditCardNumber 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性
@ScriptAssert(lang=, script=, alias=) 要有Java Scripting API 即JSR 223 (“Scripting for the JavaTM Platform”)的实现
@SafeHtml(whitelistType=, additionalTags=) classpath中要有jsoup包