• 反射获取本类和父类所有属性,并根据注解校验属性


    1. getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。

    2. getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。

    3. 同样类似的还有getConstructors()和getDeclaredConstructors()、getMethods()和getDeclaredMethods(),这两者分别表示获取某个类的方法、构造函数。
    4. 获取到当前类以及父类的所有属性
      /**
           * 获取本类及其父类的属性
           * @param clazz 当前类对象
           * @return 字段数组
           */
          private static List<Field> getAllFields(Class<?> clazz) {
              List<Field> fieldList = new ArrayList<>();
              while (clazz != null){
                  fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
                  clazz = clazz.getSuperclass();
              }
              return fieldList;
          }
    5. 校验属性
      public class EasyExcelValidHelper {
      
          private EasyExcelValidHelper(){}
      
          private static final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
      
          public static <T> String validateEntity(T obj) throws Exception {
              StringBuilder result = new StringBuilder();
              Set<ConstraintViolation<T>> set = validator.validate(obj, Default.class);
              if (set != null && !set.isEmpty()) {
                  for (ConstraintViolation<T> cv : set) {
                      Optional<Field> fieldOptional = getAllFields(obj.getClass())
                              .stream().filter(i -> cv.getPropertyPath().toString().equals(i.getName())).findAny();
                      if (fieldOptional.isPresent()) {
                          Field declaredField = fieldOptional.get();
                          ExcelProperty annotation = declaredField.getAnnotation(ExcelProperty.class);
                          //拼接错误信息,包含当前出错数据的标题名字+错误信息
                          result.append(annotation.value()[0]).append(cv.getMessage()).append(";");
                      }else{
                          throw new RuntimeException("系统异常");
                      }
                  }
              }
              return result.toString();
          }
          /**
           * 获取本类及其父类的属性
           * @param clazz 当前类对象
           * @return 字段数组
           */
          private static List<Field> getAllFields(Class<?> clazz) {
              List<Field> fieldList = new ArrayList<>();
              while (clazz != null){
                  fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
                  clazz = clazz.getSuperclass();
              }
              return fieldList;
          }
      }
  • 相关阅读:
    java操作生成jar包 和写入jar包
    jboss配置jndi连接池
    windows 域的LDAP查询相关举例
    LDAP error Code 及解决方法
    HDU 6417
    CF1299D Around the World
    codechef Chef and The Colored Grid
    Educational Codeforces Round 82 (Rated for Div. 2)
    CF1237F Balanced Domino Placements
    CF1254E Send Tree to Charlie
  • 原文地址:https://www.cnblogs.com/yuming2018/p/14148130.html
Copyright © 2020-2023  润新知