Spring Boot自定义校验注解

Laughing
2019-07-26 / 1 评论 / 1,434 阅读 / 搜一下 / 正在检测是否收录...

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

自定义注解

package Cc.LiSen.Validators;  
  
import javax.validation.Constraint;  
import javax.validation.Payload;  
import java.lang.annotation.ElementType;  
import java.lang.annotation.Retention;  
import java.lang.annotation.RetentionPolicy;  
import java.lang.annotation.Target;  
  
/** 
 * ClassName: EmailValidator <br/> 
 * Description: <br/> 
 * date: 2019/7/26 20:44<br/> 
 * 
 * @since JDK 1.8 
 */  
@Constraint(validatedBy = EmailValidatorHandler.class)  
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE,ElementType.CONSTRUCTOR,ElementType.PARAMETER})  
@Retention(RetentionPolicy.RUNTIME)  
public @interface EmailValidator {  
    String message() default "只能使用lisen.org后缀的邮箱";  
    Class<?>[] groups() default  {};  
    Class<? extends Payload>[] payload() default {};  
    String value();  
}

注解处理类

package Cc.LiSen.Validators;  
  
import org.apache.tomcat.util.bcel.classfile.Constant;  
import javax.validation.ConstraintValidator;  
import javax.validation.ConstraintValidatorContext;  
import java.util.Date;  
  
/** 
 * ClassName: EmailValidatorHandler <br/> 
 * Description: <br/> 
 * date: 2019/7/26 19:54<br/> 
 * 
 * @since JDK 1.8 
 */  
public class EmailValidatorHandler implements ConstraintValidator<EmailValidator, String> {  
    private String regEmail;  
  
    @Override  
    public void initialize(EmailValidator constraintAnnotation) {  
        regEmail = constraintAnnotation.value();  
    }  
  
    @Override  
    public boolean isValid(String value, ConstraintValidatorContext context) {  
        return  regEmail.endsWith(value);  
    }  
}

使用注解

package Cc.LiSen.Pojos;  
  
import Cc.LiSen.Validators.EmailValidator;  
import lombok.Data;  
import org.hibernate.annotations.ColumnDefault;  
import org.hibernate.validator.constraints.Length;  
import org.hibernate.validator.constraints.URL;  
import org.springframework.format.annotation.DateTimeFormat;  
  
import javax.persistence.*;  
import java.util.Date;  
  
/** 
 * ClassName: User <br/> 
 * Description: <br/> 
 * date: 2019/7/21 11:38<br/> 
 * 
 * @since JDK 1.8 
 */  
@Table(name="Users")  
@Entity  
public class User {  
    public long getID() {  
        return ID;  
    }  
  
    public void setID(long ID) {  
        this.ID = ID;  
    }  
  
    public String getUserLogin() {  
        return userLogin;  
    }  
  
    public void setUserLogin(String userLogin) {  
        this.userLogin = userLogin;  
    }  
  
    public String getUserPass() {  
        return userPass;  
    }  
  
    public void setUserPass(String userPass) {  
        this.userPass = userPass;  
    }  
  
    public String getUserNicename() {  
        return userNicename;  
    }  
  
    public void setUserNicename(String userNicename) {  
        this.userNicename = userNicename;  
    }  
  
    public String getUserEmail() {  
        return userEmail;  
    }  
  
    public void setUserEmail(String userEmail) {  
        this.userEmail = userEmail;  
    }  
  
    public String getUserUrl() {  
        return userUrl;  
    }  
  
    public void setUserUrl(String userUrl) {  
        this.userUrl = userUrl;  
    }  
  
    public Date getUserRegistered() {  
        return userRegistered;  
    }  
  
    public void setUserRegistered(Date userRegistered) {  
        this.userRegistered = userRegistered;  
    }  
  
    public String getUserActivation_key() {  
        return userActivation_key;  
    }  
  
    public void setUserActivation_key(String userActivation_key) {  
        this.userActivation_key = userActivation_key;  
    }  
  
    public int getUserStatus() {  
        return userStatus;  
    }  
  
    public void setUserStatus(int userStatus) {  
        this.userStatus = userStatus;  
    }  
  
    public String getDisplayName() {  
        return displayName;  
    }  
  
    public void setDisplayName(String displayName) {  
        this.displayName = displayName;  
    }  
  
    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    public long ID;  
    @Column(name = "user_login",length = (60))  
    private String userLogin;  
    private String userPass;  
  
    private String userNicename;  
  
    @Length(min = 0,max = 10,message = "邮箱长度不能超过10位")  
    @EmailValidator(value = "@lisen.org")  
    private String userEmail;  
    @URL  
    private String userUrl;  
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")  
    private Date userRegistered;  
    private String userActivation_key;  
    private int userStatus;  
    private String displayName;  
}  

使用

@RequestMapping("/page/{num}")  
    ModelAndView GetArticleByPage(@PathVariable int num) {  
        List<PostType> postTypesTop = postTypeService.findTopMenu(1, "posttype_order");  
        List<PostType> postTypesNav = postTypeService.findTopMenu(0, "posttype_order");  
        Page<Post> postPage = postService.findAllPosts(num, 10, Sort.Direction.DESC, new String[]{"postDate"});  
        int pageNum = postPage.getTotalPages();  
        int count = postPage.getNumber();  
  
        ModelMap map = new ModelMap();  
        map.addAttribute("pageNum", pageNum);  
        if (pageNum > num) {  
            map.addAttribute("nextPage", num + 1);  
        }  
        map.put("posttypestop", postTypesTop);  
        map.put("posttypesnav", postTypesNav);  
        map.put("posts", postPage.getContent());  
        return new ModelAndView("index", map);  
    }
0

评论 (1)

取消
  1. 头像
    墨香
    Windows X64 · FireFox

    springboot自定义校验注解_木子网 http://togelsingapuraku.com

    回复
  2. 头像
    ZAERA
    Windows 10 · Google Chrome

    测试一下

    回复