springboot自定义校验注解

原创 Laughing  2019-07-26 21:23  阅读 11 次 评论 0 条

自定义注解,主要是实现ConstraintValidator的处理类即可,这里已编写一个校验常量的注解为例:参数值只能为特定的值。

自定义注解

  1. package Net.XiangCaoWuYu.Validators;  
  2.   
  3. import javax.validation.Constraint;  
  4. import javax.validation.Payload;  
  5. import java.lang.annotation.ElementType;  
  6. import java.lang.annotation.Retention;  
  7. import java.lang.annotation.RetentionPolicy;  
  8. import java.lang.annotation.Target;  
  9.   
  10. /** 
  11.  * ClassName: EmailValidator <br/> 
  12.  * Description: <br/> 
  13.  * date: 2019/7/26 20:44<br/> 
  14.  * 
  15.  * @author lisen01<br /> 
  16.  * @since JDK 1.8 
  17.  */  
  18. @Constraint(validatedBy = EmailValidatorHandler.class)  
  19. @Target({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE,ElementType.CONSTRUCTOR,ElementType.PARAMETER})  
  20. @Retention(RetentionPolicy.RUNTIME)  
  21. public @interface EmailValidator {  
  22.     String message() default "只能使用lisen.me后缀的邮箱";  
  23.     Class<?>[] groups() default  {};  
  24.     Class<? extends Payload>[] payload() default {};  
  25.     String value();  
  26. }  

注解处理类

  1. package Net.XiangCaoWuYu.Validators;  
  2.   
  3. import org.apache.tomcat.util.bcel.classfile.Constant;  
  4. import javax.validation.ConstraintValidator;  
  5. import javax.validation.ConstraintValidatorContext;  
  6. import java.util.Date;  
  7.   
  8. /** 
  9.  * ClassName: EmailValidatorHandler <br/> 
  10.  * Description: <br/> 
  11.  * date: 2019/7/26 19:54<br/> 
  12.  * 
  13.  * @author lisen01<br /> 
  14.  * @since JDK 1.8 
  15.  */  
  16. public class EmailValidatorHandler implements ConstraintValidator<EmailValidator, String> {  
  17.     private String regEmail;  
  18.   
  19.     /** 
  20.      * Initializes the validator in preparation for 
  21.      * {@link #isValid(Object, ConstraintValidatorContext)} calls. 
  22.      * The constraint annotation for a given constraint declaration 
  23.      * is passed. 
  24.      * <p> 
  25.      * This method is guaranteed to be called before any use of this instance for 
  26.      * validation. 
  27.      * <p> 
  28.      * The default implementation is a no-op. 
  29.      * 
  30.      * @param constraintAnnotation annotation instance for a given constraint declaration 
  31.      */  
  32.     @Override  
  33.     public void initialize(EmailValidator constraintAnnotation) {  
  34.         regEmail = constraintAnnotation.value();  
  35.     }  
  36.   
  37.     /** 
  38.      * Implements the validation logic. 
  39.      * The state of {@code value} must not be altered. 
  40.      * <p> 
  41.      * This method can be accessed concurrently, thread-safety must be ensured 
  42.      * by the implementation. 
  43.      * 
  44.      * @param value   object to validate 
  45.      * @param context context in which the constraint is evaluated 
  46.      * @return {@code false} if {@code value} does not pass the constraint 
  47.      */  
  48.     @Override  
  49.     public boolean isValid(String value, ConstraintValidatorContext context) {  
  50.         return  regEmail.endsWith(value);  
  51.     }  
  52. }  

使用注解

  1. package Net.XiangCaoWuYu.Pojos;  
  2.   
  3. import Net.XiangCaoWuYu.Validators.EmailValidator;  
  4. import lombok.Data;  
  5. import org.hibernate.annotations.ColumnDefault;  
  6. import org.hibernate.validator.constraints.Length;  
  7. import org.hibernate.validator.constraints.URL;  
  8. import org.springframework.format.annotation.DateTimeFormat;  
  9.   
  10. import javax.persistence.*;  
  11. import java.util.Date;  
  12.   
  13. /** 
  14.  * ClassName: User <br/> 
  15.  * Description: <br/> 
  16.  * date: 2019/7/21 11:38<br/> 
  17.  * 
  18.  * @author lisen01<br /> 
  19.  * @since JDK 1.8 
  20.  */  
  21. @Table(name="Users")  
  22. @Entity  
  23. public class User {  
  24.     public long getID() {  
  25.         return ID;  
  26.     }  
  27.   
  28.     public void setID(long ID) {  
  29.         this.ID = ID;  
  30.     }  
  31.   
  32.     public String getUserLogin() {  
  33.         return userLogin;  
  34.     }  
  35.   
  36.     public void setUserLogin(String userLogin) {  
  37.         this.userLogin = userLogin;  
  38.     }  
  39.   
  40.     public String getUserPass() {  
  41.         return userPass;  
  42.     }  
  43.   
  44.     public void setUserPass(String userPass) {  
  45.         this.userPass = userPass;  
  46.     }  
  47.   
  48.     public String getUserNicename() {  
  49.         return userNicename;  
  50.     }  
  51.   
  52.     public void setUserNicename(String userNicename) {  
  53.         this.userNicename = userNicename;  
  54.     }  
  55.   
  56.     public String getUserEmail() {  
  57.         return userEmail;  
  58.     }  
  59.   
  60.     public void setUserEmail(String userEmail) {  
  61.         this.userEmail = userEmail;  
  62.     }  
  63.   
  64.     public String getUserUrl() {  
  65.         return userUrl;  
  66.     }  
  67.   
  68.     public void setUserUrl(String userUrl) {  
  69.         this.userUrl = userUrl;  
  70.     }  
  71.   
  72.     public Date getUserRegistered() {  
  73.         return userRegistered;  
  74.     }  
  75.   
  76.     public void setUserRegistered(Date userRegistered) {  
  77.         this.userRegistered = userRegistered;  
  78.     }  
  79.   
  80.     public String getUserActivation_key() {  
  81.         return userActivation_key;  
  82.     }  
  83.   
  84.     public void setUserActivation_key(String userActivation_key) {  
  85.         this.userActivation_key = userActivation_key;  
  86.     }  
  87.   
  88.     public int getUserStatus() {  
  89.         return userStatus;  
  90.     }  
  91.   
  92.     public void setUserStatus(int userStatus) {  
  93.         this.userStatus = userStatus;  
  94.     }  
  95.   
  96.     public String getDisplayName() {  
  97.         return displayName;  
  98.     }  
  99.   
  100.     public void setDisplayName(String displayName) {  
  101.         this.displayName = displayName;  
  102.     }  
  103.   
  104.     @Id  
  105.     @GeneratedValue(strategy = GenerationType.IDENTITY)  
  106.     public long ID;  
  107.     @Column(name = "user_login",length = (60))  
  108.     private String userLogin;  
  109.     private String userPass;  
  110.   
  111.     private String userNicename;  
  112.   
  113.     @Length(min = 0,max = 10,message = "邮箱长度不能超过10位")  
  114.     @EmailValidator(value = "@lisen.me")  
  115.     private String userEmail;  
  116.     @URL  
  117.     private String userUrl;  
  118.     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")  
  119.     private Date userRegistered;  
  120.     private String userActivation_key;  
  121.     private int userStatus;  
  122.     private String displayName;  
  123. }  

使用

  1. @RequestMapping("/page/{num}")  
  2.     ModelAndView GetArticleByPage(@PathVariable int num) {  
  3.         List<PostType> postTypesTop = postTypeService.findTopMenu(1"posttype_order");  
  4.         List<PostType> postTypesNav = postTypeService.findTopMenu(0"posttype_order");  
  5.         Page<Post> postPage = postService.findAllPosts(num, 10, Sort.Direction.DESC, new String[]{"postDate"});  
  6.         int pageNum = postPage.getTotalPages();  
  7.         int count = postPage.getNumber();  
  8.   
  9.         ModelMap map = new ModelMap();  
  10.         map.addAttribute("pageNum", pageNum);  
  11.         if (pageNum > num) {  
  12.             map.addAttribute("nextPage", num + 1);  
  13.         }  
  14.         map.put("posttypestop", postTypesTop);  
  15.         map.put("posttypesnav", postTypesNav);  
  16.         map.put("posts", postPage.getContent());  
  17.         return new ModelAndView("index", map);  
  18.     }  

历史上的今天:

本文地址:https://www.lisen.me/springboot-custom-validation-annotations.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情