上文《后端编码规范系列(一)参数校验》我们介绍了后端编码规范的时候需要要做参数校验,但是hibernate-validator能支持的校验注解有限,所以很多时候我们还需要自己来实现某些参数的校验,所以为了保持统一,我们就需要自定义注解了。
在java里面自定义注解非常简单,主要分为两步:
1、编写一个interface的注解 2、编写一个interface注解的实现类
下面我们来演示一下,假设我们添加一个注解,也就是字符串中不能有空格。示例如下:
1)创建一个注解
这里创建一个注解,使用的是interface类,但是需要在interface前面添加@符号,然后在雷鸣里面定义好默认的消息及类信息,示例代码如下:
package com.mybatis.demo.valid; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; import javax.validation.constraints.NotBlank; @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE }) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy = {HaveNoBlankValidator.class})// 实现类是哪个 public @interface HaveNoBlank { // 默认错误信息 String message() default "不能含有空格"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; //同一个元素上指定多个该注解时使用 @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface List { NotBlank[] value(); } }
2)编写实现类
接着我们编写一个具体的实现类,也就是前面在interface里面注明的HaveNoBlankValidator.class。示例代码如下:
package com.mybatis.demo.valid; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; /** * 判断字符串中间是否有空格 */ public class HaveNoBlankValidator implements ConstraintValidator<HaveNoBlank, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { return !value.contains(" "); } }
3)添加新注解测试
此时我们再前面的username字段里面添加上我们的新注解:@HaveNoBlank(message = "username不能带有空格"),示例图如下:
然后把项目运行起来,并且在客户端故意给username字段添加一个空格:
此时结果的话,我们可以看到新的注解生效了。
备注:
1、参数校验我们尽量保持全部使用注解的形式进行判断,非必须不准使用非注解的方式。 2、如果框架没有我们想要的注解的话,可以直接照抄上面的结构,然后根据我们的逻辑来进行参数判断。
本文主要是对参数校验做一个补充的部分。最后按照惯例,附上本案例的远吗,登录后即可下载。
还没有评论,来说两句吧...