親,Spring瞭解一下 : SmartValidator

場景

在Spring中使用參數檢驗,最常用的是使用註解的方法**@Valid**

如下:

//定義bean
public class ApplyParams extends Params{

    @Override
    @NotBlank(message = "標題不能爲空")
    @Length(max = 30,message = "標題最多30字")
    public String getTitle() {
        return super.getTitle();
    }

    @Override
    @NotBlank(message = "目標郵件不能爲空")
    public String getTargetEmail() {
        return super.getTargetEmail();
    }
}

//使用時
@RequestMapping("/insert")
public String insert (@Valid ApplyParams param, HttpServletRequest request){
    ....
}

可以使用BindingResult或捕獲BindingException異常,來處理失敗的結果.

有時候需要 動態的,有條件的 去校驗參數

比如預約發郵件,有需求修改一個郵件,

  1. 在郵件還沒有發出去,可以修改,校驗郵件內容的有效性,
  2. 如果郵件已經發出去了,則不能修改了.

這裏就需要先判斷下郵件是否發出去了.

這時就可以使用org.springframework.validation.SmartValidator.

SmartValidator

SmartValidator 的SpringBean初始化時就初始化到IOC容器中. 在使用時,可以直接注入使用.使用方式如下:

@Qualifier("defaultValidator") //默認LocalValidatorFactoryBean
@Autowired
SmartValidator validator;
//
//...............
//
BindingResult br = new BeanPropertyBindingResult(param,param.getClass().getSimpleName());
validator.validate(param,br);
if(br.hasErrors()){
    String errorMesssage = "參數錯誤: ";
    for (FieldError fieldError : br.getFieldErrors()) {
        errorMesssage += fieldError.getDefaultMessage() + ", ";
    }
    return ResultPojo.Err(errorMesssage);
}

默認關係有下圖:

SmartValidator有兩個方法:

  • void validate(Object target, Errors errors); //繼承自 Validator
  • void validate(Object target, Errors errors, Object... validationHints);

各參數

  • target : 是指需要校驗的bean, 例如: ApplyParams
  • errors : 當校驗失敗時的錯誤處理
  • validationHints : 校驗命中的策略,比如分組

SmartValidator 最終還是使用的hibernate-validator來做的參數校驗

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