外贸企业网站制作,网站建设与管理工作内容,建设部网站电话,神农架网站建设spring boot项目对参数进行校验时#xff0c;比如非空校验#xff0c;可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验#xff0c;自带的校验规则无法满足要求#xff0c;此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样…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 ConstraintValidatorMobileNo, String {Overridepublic 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 {NotNullprivate Long id;NotNullMobileNoprivate 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错误码错误信息如下。当然这里返回的错误信息比较不友好实际项目中可以对参数校验异常统一拦截返回需要的数据格式。