一:介紹java
在寫後端時,面對多個參數,好比手機號碼、密碼等咱們經常須要寫驗證邏輯,當須要驗證的參數較多的時候咱們會須要寫不少的判斷語句,這就形成了大量的代碼冗餘。所以我開發了一套參數驗證器,只須要調用參數驗證器實例化對象的校驗方法便可對傳入的對象中的全部參數進行校驗。一句話就完成了對全部參數的校驗。正則表達式
項目使用案例:後端
完成註冊業務:app
1 @RestController 2 @RequestMapping("/cmpas/user") 3 public class UserController { 4 @Autowired 5 private IUserService iUserService; 6 @Autowired 7 private ResultData resultData; 8 @Autowired 9 private ParameterValidator parameterValidator; 10 @RequestMapping(value = "/register",params = {"PhoneNumber","Password","NickName","RealName","Gender"}) 11 public ResultData register(HttpSession httpSession, User user) 12 { 13 resultData.setResult(parameterValidator.validate(user)); 14 if(resultData.getResult().equals(ParameterValidator.SUCESS)) 15 { 16 //校驗成功 17 if (iUserService.insert(user)) 18 resultData.setResult("註冊成功"); 19 else 20 resultData.setResult("註冊失敗"); 21 } 22 //將錯誤緣由返回 23 return resultData; 24 } 25 }
二:開發場景模擬(註冊用戶)ui
1:用戶實體this
public class User{ private String Username; private String Password; //get、set方法
}
2:開發本身的參數校驗器(繼承抽象類AbstractParameterValidator,寫入本身的校驗方法)spa
public class ParameterValidator extends AbstractParameterValidator{
//校驗用戶名的方法 public String Username(String str) { String back="用戶名不合法";//錯誤提示 String regex="[0-9a-zA-Z]{1,12}";//正則表達式 return str.matches(regex)?SUCCESS:back;//返回 } //校驗密碼的方法 public String Password(String str) { String back="密碼不合法"; String regex="[0-9a-zA-Z]{8,20}"; return str.matches(regex)?SUCCESS:back; } }
2:新建一個用戶實體3d
User user=new User(); //對用戶實例user進行賦值 user.setUsername("HumorChen"); user.setPassword("123456");
調用參數校驗器示範:日誌
//實例化參數驗證器對象
ParameterValidator parameterValidator=new ParameterValidator();
//調用校驗方法
String result=parameterValidator.validate(user);
調用的時候只須要使用code
parameterValidator.validate(user);
所有經過校驗則返回值爲AbstractParameterValidator.SUCCESS
不然爲不經過的緣由
三:結構
核心方法validate(Object... objects) 對傳入的對象中的全部字段去咱們本身編寫的參數校驗器類中去找有沒有同名方法,也就是找有沒有須要被覈驗,若是須要就進行校驗,最終將結果返回
1 public String validate(Object... objects) { 2 StringBuilder stringBuilder = new StringBuilder(); 3 for (Object object : objects) 4 for (Field field : object.getClass().getDeclaredFields()) { 5 field.setAccessible(true); 6 Method method = null; 7 try { 8 method = this.getClass().getDeclaredMethod(field.getName(), String.class); 9 } catch (Exception e) { } 10 if (method != null) { 11 String result =null; 12 try{ 13 result=(String) method.invoke(this, field.get(object)); 14 //輸出日誌 15 log(field.getName(),field.get(object),result); 16 }catch (Exception e){} 17 if (!result.equals(SUCESS)) { 18 if (stringBuilder.length() > 0 && (!outputAllError)) 19 return stringBuilder.toString(); 20 stringBuilder.append(result); 21 stringBuilder.append("\n"); 22 } 23 } 24 } 25 return stringBuilder.length() == 0 ? SUCESS : stringBuilder.toString(); 26 }