Validation的實踐之控制層校驗

利用validation完成對控制層的VO類進行校驗

  •  import javax.validation.Validation;
     import javax.validation.Validator;
     import javax.validation.ValidatorFactory;
     import org.hibernate.validator.HibernateValidator;
     import org.springframework.context.annotation.Bean;
     import org.springframework.context.annotation.Configuration;
     import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
    
     @Configuration
     public class ValidatorConfiguration {
          
         @Bean
         public MethodValidationPostProcessor methodValidationPostProcessor() {
             MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor();
             //設(shè)置validator模式為快速失敗返回
             postProcessor.setValidator(validator());
             return postProcessor;
        }
    
    
         @Bean
         public Validator validator(){
             ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
                     .configure()
                     .addProperty( "hibernate.validator.fail_fast", "true" )
                     .buildValidatorFactory();
             Validator validator = validatorFactory.getValidator();
    
             return validator;
         }
    
     }
    

這里利用springboot進行開發(fā),@Configuration相當于之前的xml配置文件與,@Bean表示之前的一個bean類.

public class BaseVO implements Serializable {

private static final long serialVersionUID = -7265112497823460621L;

// 令牌
@NotNull(message="商家登錄超時,或在其它設(shè)備登錄!")
String token;

public String getToken() {
    return token;
}

public void setToken(String token) {
    this.token = token;
}

@Override
public String toString() {
    return ReflectionToStringBuilder.toString(this);
}
}

這里簡單創(chuàng)建一個VO類,在token的上面使用@notnull注解,并給message賦值.

  •  public <T> void validate(T o) {
      Set<ConstraintViolation<T>> violationSet = validator.validate(o);
      boolean result = true;
      logger.debug(request.getRequestURI() + " validate,params is {}",o);
      String message = null;
      for (ConstraintViolation<T> model : violationSet) {
          message = model.getMessage();
          logger.warn(message);
          result = false;
      }
      if(!result) {
          throw new ValidateException(message);
      }
    }
    

將validate方法放入BaseController中,當然,這里的validator是注入進來的,代碼省略了.項目在啟動的時候,會校驗token是否為空,當發(fā)現(xiàn)token為空時,set集合便有值,然后拋出異常.這時候需要定義一個全局異常.這樣就可以了.

@ControllerAdvice
public class CommExceptionHandle {

@ExceptionHandler(value = Exception.class)
@ResponseBody
public Map<String, Object> handle(Exception e) {
    Map<String, Object> map = new HashMap<String, Object>();
    if (e instanceof ValidateException) {
        
        map.put("status", BusinessErrorCode.PARAMS_EXCEPTION.getCode());
        map.put("remark", e.getMessage());
        return ResponseData.takeResponseData(map);
    }else {
        map.put("status", BusinessErrorCode.SYSTEM_ERROR.getCode());
        map.put("remark", BusinessErrorCode.SYSTEM_ERROR.getDesc());
        return ResponseData.takeResponseData(map);
    }
    
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毅臊,一起剝皮案震驚了整個濱河市究珊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌历帚,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虫几,居然都是意外死亡黑低,警方通過查閱死者的電腦和手機赘艳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來克握,“玉大人蕾管,你說我怎么就攤上這事∑邪担” “怎么了掰曾?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長停团。 經(jīng)常有香客問我旷坦,道長,這世上最難降的妖魔是什么佑稠? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任秒梅,我火速辦了婚禮,結(jié)果婚禮上舌胶,老公的妹妹穿的比我還像新娘捆蜀。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布辆它。 她就那樣靜靜地躺著誊薄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锰茉。 梳的紋絲不亂的頭發(fā)上呢蔫,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音飒筑,去河邊找鬼咐刨。 笑死,一個胖子當著我的面吹牛扬霜,可吹牛的內(nèi)容都是我干的定鸟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼著瓶,長吁一口氣:“原來是場噩夢啊……” “哼联予!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起材原,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沸久,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后余蟹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卷胯,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年威酒,在試婚紗的時候發(fā)現(xiàn)自己被綠了窑睁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡葵孤,死狀恐怖担钮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尤仍,我是刑警寧澤箫津,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站宰啦,受9級特大地震影響苏遥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赡模,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一田炭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纺裁,春花似錦诫肠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谚殊,卻和暖如春丧鸯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫩絮。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工丛肢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剿干。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓蜂怎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親置尔。 傳聞我的和親對象是個殘疾皇子杠步,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容