With 參數校驗

以下內容純屬個人扯淡,僅供參考

目錄

《Spring實戰》給出的參數校驗方式

使用SpringAOP改進

使用全局異常處理器實現

將參數校驗層完全抽離

自定義註解

service層參數校驗設計


 

《Spring實戰》給出的參數校驗方式

參考:《Spring實戰》知識點總結   搜索:表單校驗

大致思路:在需要被校驗的實體類的屬性上添加校驗註解;在POST方法該實體類前添加@Valid註解,並緊隨添加一個Errors errors形參;在該方法體errors.hasErrors()是否校驗通過來控制

使用SpringAOP改進

1、實體類屬性添加校驗註解

@Data
public class PctUserParam {

    @NotEmpty(message = "用戶名不能爲空")
    private String username;

    private String password;

    @Email
    private String mail;

    private Integer status;

    /**
     * 備註
     */
    private String remark;
}

2、控制器方法

@PostMapping("user")
public CommonResult<Boolean> addUser(
        @RequestBody @Validated PctUserParam pctUserParam,
        BindingResult bindingResult) {
    
    return pctUserService.addUser(pctUserParam);
}

用@Validated替換了@Valid,並且Errors替換爲BindingResult

3、AOP攔截處理

@Aspect
@Component
@Order(2)
@Slf4j
public class BindingResultAspect {

    /**
     * 定義切入點
     *
     **/
    @Pointcut("execution(public * com.controller.*.*(..))")
    public void bindingResult() {
    }

    /**
     * 環繞通知
     *
     * @date 10:54 2020/3/20
     * @author 李文龍
     * @param
     * @return
     **/
    @Around("bindingResult()")
    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        //獲取方法的所有形參
        Object[] args = joinPoint.getArgs();
        for (Object arg : args) {
            //拿到參數校驗結果形參
            if (arg instanceof BindingResult) {
                BindingResult result = (BindingResult) arg;
                if (result.hasErrors()) { //校驗失敗
                    FieldError fieldError = result.getFieldError();
                    if(fieldError!=null){
                        log.error("fieldError="+fieldError.getDefaultMessage());
                        return CommonResult.validateFailed(fieldError.getDefaultMessage());
                    }else{
                        return CommonResult.validateFailed();
                    }
                }
            }
        }
        //正常執行方法
        return joinPoint.proceed();
    }
}

 

使用全局異常處理器實現

將參數校驗層完全抽離

自定義註解

service層參數校驗設計

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章