有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从单个对象以及对象集合中提取任何属性值

我有一个从对象中提取字段的函数,如下所示:

public String getId(Map<String, Object> input, String fieldName) 
    return BeanUtils.getProperty(input, fieldName);
   }

实际上,上面的函数是在方面中调用的

我正在从所有截获的方法参数构造在上述函数中传递的Map<String, Object>,如下所示:

public Map<String, Object> getArgumentsAsMap(JoinPoint joinPoint) throws JsonProcessingException {
    Map<String, Object> argumentNameValueMap = new HashMap<>();

    MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();

    if (methodSignature.getParameterNames() == null) {
      return argumentNameValueMap;
    }

    for (int i = 0; i < methodSignature.getParameterNames().length; i++) {
      String argumentName = methodSignature.getParameterNames()[i];
      Object argumentValue = joinPoint.getArgs()[i];
      if (Objects.isNull(methodSignature.getParameterTypes())) {
        argumentNameValueMap.put(argumentName, mapper.convertValue(argumentValue, Map.class));
      }
    }
    return argumentNameValueMap;
  }

函数getId适用于任何普通对象和任何参数,但List类型的参数除外

实际上,我在将对象列表作为param传递时得到了这个映射,如下所示:

Map<String, Object> myMap = {"myDTOs" -> {"value" -> "[{"id":null,"name":"Test","description":"Test","studentId":"abcd"}]"}}

从上面的图中,我尝试使用BeanUtils提取studentId,如下所示:

BeanUtils.getProperty(myMap, "value[0].studentId")

但它不起作用,我得到了以下例外:

Indexed or mapped properties are not supported on objects of type

请任何人在此提供帮助,以便提取任何字段值的代码既适用于单个对象,也适用于集合?否则,我必须编写额外的代码来检查参数是否可能是集合类型,然后相应地处理它


共 (0) 个答案