自定义参数验证
官方提供的参数验证基本满足需求了,但是有时候我们需要自定义验证去满足一些特殊需求,下面来实现一个自定义参数验证
我们定义一个注解,这个注解用于提示不用包含*的功能
import javax.validation.Constraint
import kotlin.reflect.KClass
@Target(AnnotationTarget.FIELD, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@MustBeDocumented
@Constraint(validatedBy = [NotContainsStarValidator::class])
annotation class NotContainsStar(
//如果外部不设置这个属性,那么使用当前默认
//如果使用设置了就用默认的
val message:String = "不能包括字符*",
//必须,没有会提示错误
val groups: Array<KClass<out Any>> = [],
//必须,没有会提示错误
val payload: Array<KClass<out Any>> = []
)
注解需要一个具体实现的业务类NotContainsStarValidator
import javax.validation.ConstraintValidator
import javax.validation.ConstraintValidatorContext
class NotContainsStarValidator: ConstraintValidator<NotContainsStar,String> {
override fun isValid(value: String?, context: ConstraintValidatorContext?): Boolean {
if(value != null && context != null){
if(value.contains("*")){
// context.disableDefaultConstraintViolation();//禁用默认的message的值
// //重新添加错误提示语句
// context
// .buildConstraintViolationWithTemplate("字符串不能包括字符*")
// .addConstraintViolation()
return false
}
}
return true
}
}
最后打在要被注解的字段上就行了
@NotContainsStar(message = "描述中不能包含字符*")
val description: String? = null