<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Javabean非空變量校驗工具

      摘要 調研java Class getDeclaredFields() 與getFields()的區別,設計請求參數為Javabean時,基于反射機制校驗其中非空變量的公共方法。

       

      java Class getDeclaredFields() 與getFields()的區別

      概述:

      (1)getDeclaredFields() 返回Class中所有的字段,包括私有字段;

      (2)getFields 只返回公共字段,即由public修飾的字段。

      測試之前,請定義一個代表員工的EmployeeDTO類,成員變量訪問控制修飾符包括public等,當前,實際定義Javabean的時候,成員變量的控制修飾符是只可以為private的。

      public class EmployeeDTO {
          public Integer id;
          private String sex;
          private String name;
          protected String job; // 職位
          public Integer jobNumber;// 工號
          private float salary;
      
          String phone;
          // 省略get、set方法  
      }

      測試用例,一個main函數:

      public class ValidationTest {
      
          public static void main(String[] args) {
      //        testGetDeclaredFields();
      //        System.err.println(" ==================== ");
      //        testGetFields();
              validateIsEmpty();
          }
      
          public static void testGetDeclaredFields() {
              Field[] fields = EmployeeDTO.class.getDeclaredFields();
              for (int i = 0; i < fields.length; i++) {
                  Field field = fields[i];
                  System.out.println(field.getName());
              }
          }
      
          public static void testGetFields() {
              Field[] fields = EmployeeDTO.class.getFields();
              for (int i = 0; i < fields.length; i++) {
                  Field field = fields[i];
                  System.out.println(field.getName());
              }
          }
      
          
      }

      testGetFields ()打印結果:

      id
      jobNumber

      testGetDeclaredFields ()打印結果:

      id
      sex
      name
      job
      jobNumber
      salary
      phone

      由測試結果可見,上述概述成立。

      校驗Java bean中非空字段

      在ValidationTest中新增如下函數:

      public static void validateIsEmpty() {
              EmployeeDTO emp = new EmployeeDTO();
              emp.setId(100);
              emp.setJob(null);
              emp.setJobNumber(100001);
              List<String> checkedFieldNames = new ArrayList<>();
              checkedFieldNames.add("id");
              checkedFieldNames.add("job");
              checkedFieldNames.add("jobNumber");
              try {
                  ValidationUtils.checkNotEmpty(emp, checkedFieldNames);
              } catch (Exception e) {
                  System.out.println("-----------");
                  System.out.println(e.getMessage());
              }
          }

      其中,本章節的主角ValidationUtils源碼如下:

      import java.lang.reflect.Field;
      import java.lang.reflect.Method;
      import java.util.List;
      
      /**
       * @Description 校驗工具類
       */
      public class ValidationUtils {
      
          private final static String PIX_GET = "get";
      
          /**
           * @Description 只校驗列表中傳入的字段,斷言對象中的字段值非空
           * 
           * @param object 待檢測對象
           * @param checkedFieldNames 被檢查變量
           * @throws Exception 如果被校驗字段的值為空,拋出此異常
           */
          public static void checkNotEmpty(Object object, List<String> checkedFieldNames) throws Exception {
              if (null == object) {
                  throw new Exception("Param is NULL");
              }
              Class<?> clazz = object.getClass();
              Field[] fields = clazz.getDeclaredFields();
              String fieldName = "";
              StringBuilder methodName = null;
              Method method = null;
              for (Field field : fields) {
                  fieldName = field.getName();
                  if (!hasElement(fieldName, checkedFieldNames)) {
                      continue;
                  }
                  methodName = new StringBuilder(PIX_GET);
                  methodName = methodName.append(fieldName.substring(0, 1).toUpperCase())
                          .append(fieldName.substring(1));
                  method = clazz.getDeclaredMethod(methodName.toString());
                  Object result = method.invoke(object);
                  if (null == result || "".equals(result)) {
                      throw new Exception("Non-empty field 【".concat(fieldName).concat("】 is empty"));
                  }
              }
          }
      
          /**
           *  檢測container數組是否包含element元素
           * 
           * @return boolean,true 包含
           */
          private static boolean hasElement(String element, List<String> containers) {
              if (containers.contains(element)) {
                  return true;
              }
              return false;
          }
      }

      在main函數中調用后,控制臺打印如下信息:

      Non-empty field 【job】 is empty

       

       

      表明校驗成功,如果為job賦值為非空,則不再提示此信息。至于其它成員變量,同理可以測試。

      所以,在校驗實際業務場景中的JavaBean的時候,就無需每次手動校驗了。丟給ValidationUtils即可,是不是很方便?

       

      posted @ 2018-12-07 09:35  樓蘭胡楊  閱讀(2391)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 少妇人妻真实偷人精品| 国产福利高颜值在线观看| 成人自拍小视频在线观看| 国产青榴视频在线观看| 色综合五月伊人六月丁香| 美女黄网站人色视频免费国产| 丰满人妻一区二区三区无码AV| 又黄又爽又无遮挡免费的网站| 国内精品人妻一区二区三区| 麻豆成人精品国产免费| 日韩精品中文字幕亚洲| free性开放小少妇| 国产成人综合欧美精品久久| 亚洲av成人一区二区| 男人扒开女人内裤强吻桶进去| 国产精品白浆在线观看免费| 免费人成视频在线视频电影| 精品视频不卡免费观看| 亚洲av色图一区二区三区| 国产精品青草久久久久福利99 | 亚洲69视频| 亚洲av日韩在线资源| 亚洲精品天堂在线观看| 国产色爱av资源综合区| 日韩中文字幕有码av| 亚洲男人天堂东京热加勒比| 亚洲久悠悠色悠在线播放| 久99久热这里只有精品| 国产精品av中文字幕| 国产成人高清精品亚洲| 久热天堂在线视频精品伊人| 国产区成人精品视频| 夜夜夜高潮夜夜爽夜夜爰爰| 高安市| 精品人妻日韩中文字幕| аⅴ天堂国产最新版在线中文| 乱码午夜-极品国产内射| 亚洲大尺度无码无码专线| 丁香花在线观看免费观看图片| 欧美大胆老熟妇乱子伦视频| 97国产成人无码精品久久久|