spring boot项目自定义参数校验规则示例详解
作者:酱油何在
这篇文章主要介绍了spring boot项目如何自定义参数校验规则,自定义校验规则和自带的规则实现方式一样,先自定义一个注解,然后指定校验类,在校验类里实现具体的校验规则,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
spring boot项目对参数进行校验时,比如非空校验,可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验,自带的校验规则无法满足要求,此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样,先自定义一个注解,然后指定校验类,在校验类里实现具体的校验规则。
下面以校验手机号为例,来实现自定义参数校验规则。
首先定义一个注解,直接照着NotNull注解定义即可。
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented //这里的class就是实现具体校验规则的类 @Constraint(validatedBy = {MobileNoValidator.class}) public @interface MobileNo { String message() default "请输入正确的手机号"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
然后定义实现具体校验规则的类,这个类要实现ConstraintValidator接口。
public class MobileNoValidator implements ConstraintValidator<MobileNo, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { if ((value == null)) { return false; } String regex = "^1\\d{10}$"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(value); return m.matches(); } }
这样,很简单的两个类,就实现了自定义参数校验规则。当参数中加了MobileNo注解,如果输入的手机号不满足1打头的11位数字的规则,就会抛出异常信息。下面写个controller简单测试一下。
先定义一个vo。
public class UserVo { @NotNull private Long id; @NotNull @MobileNo private String mobileNo; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getMobileNo() { return mobileNo; } public void setMobileNo(String mobileNo) { this.mobileNo = mobileNo; } }
再定一个controller。
@RestController public class UserController { @PostMapping(value = "/test") public String test(@Validated @RequestBody UserVo userVo) { return "success"; } }
启动项目,用postman测试一下。
首先输入符合要求的手机号,这时是能正常返回success。
然后输入一个不符合要求的手机号,会返回400错误码,错误信息如下。当然这里返回的错误信息比较不友好,实际项目中可以对参数校验异常统一拦截,返回需要的数据格式。
到此这篇关于spring boot项目如何自定义参数校验规则的文章就介绍到这了,更多相关spring boot自定义参数校验规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!