kotlin使用spring mvc(八)

原创
2018/10/26 19:30
阅读数 169

自定义参数验证

官方提供的参数验证基本满足需求了,但是有时候我们需要自定义验证去满足一些特殊需求,下面来实现一个自定义参数验证

我们定义一个注解,这个注解用于提示不用包含*的功能

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
展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部