天天看點

JSR303後端校驗之使用的三種方法

1.引入

由于前端傳參常常需要校驗,比如郵箱的格式,于是誕生JSR303規則;

2.使用

能使用的校驗注解:

1.Hibernate org.hibernate.validator.constrains 裡面有的

2.Jsr303規定的 javax.validation.constraints

@pattern(regexp="")正規表達式

步驟:

1.javabean上注解

Class User{
@Email(message ="郵箱格式不正确")
private String email;
@NotBlank
@Length(min=6,max=18,message="使用者名長度必須6-18位")
private String username;
}
           

2.告訴springboot這個需要校驗@Valid

@PostMapping("/user")
public String ControllerTest(@Valid @RequestBody User user){
//1.如果不滿足校驗,會抛出異常;但項目規範有自定義異常,而自動抛出的異常不符合前端處理規範。
}

@PostMapping("/user")
public String ControllerTest(@Valid @RequestBody User user,BindingResult res){
//2.後面綁定後則不再抛出異常,而是把結果存在res,程式正常執行
	int errorCount = res.getErrorCount();//擷取錯誤個數
	if(errorCount >0){
		List<FieldError> fieldErrors = res.getFieldErrors();
		fieldErrors.forEach((fieldError)->{
			String field = fieldError.getField();//屬性
			fieldError.getRejectedValue;//擷取出錯的值
			fieldError.getDefaultMessage();//擷取提示消息
	});
	return new Response().Failed(res);
	}else{
	}
}
           

3.由于每個controller都需要校驗,為了統一校驗,利用aop來實作Jsr303

通知:

前置通知:方法執行之前觸發

後置通知:方法執行之後觸發

傳回通知:方法正常傳回之後觸發

異常通知:方法出現異常觸發

正常執行: 前置通知==>傳回通知==>後置通知

異常執行: 前置通知==>異常通知==>後置通知

環繞通知:4合一

//1.springboot引入aop的包
//1.切面  2.切入點  3.切入點表達式(* com.jd.mall.admin..*Controller.*(..))任意傳回值,admin包下的.任意包,Controller結尾的任意類,*任意方法的(..)任意參數
@Aspect
@Component
public class DataVaildAspect{
//環繞通知
	@Around("execution(* com.jd.mall.admin..*Controller.*(..))")
	public Object validAround(ProceedingJoinPoint point){
		Object proceed = null;
		try{
			
			Object[] args = point.getArgs();
			for(Object obj:args){
				if(obj instanceof BindingResult){
					BindingResult r = (BindingResult) obj;
					if(r.getErrorCount()>0){
						return new Response().Failed(r);
					}
				}
			}
			log.debug("前置通知。。。");
			proceed = point.proceed(point.getArgs());//執行目标方法
			log.debug("傳回通知。。。");
		}catch(){
			log.debug("異常通知。。。");
		}finally{
			log.debug("後置通知。。。");
		}
		return proceed;//正常controller傳回值
	}
}
           

繼續閱讀