检查是否调用了setter?

时间:2016-03-03 10:35:37

标签: java

我编写了函数,遍历HTTP查询字符串参数,并通过读取字符串设置两个POJO类属性。有些查询字符串参数属于第一类,有些属于另一类。

例如:http://example.com?crb=nmsa&cra=jasdlka&....  我正在从Map

中读取crb,cra等
Pojo pojo = new Pojo();


for (Map.Entry<String, List<String>> queryParameter : queryParamsAndValues.entrySet()) {

    System.out.println(queryParameter.getKey() + "/" + queryParameter.getValue());

    queryFieldName = QueryFieldName.getLongName(queryParameter
            .getKey());



    switch (queryFieldName) {

    case CREATED_BEFORE:
        pojo.setCreatedBefore(queryParameter.getValue()
                .get(0));
        System.out.println("CREATED BEFORE");
        break;
    case CREATED_AFTER:
        pojo
        .setCreatedAfter(queryParameter.getValue().get(0));
        System.out.println("CREATED AFTER");
        break;
    case FILTER_USAGE:
        pojo.setFilterUsage(new BigInteger(queryParameter
                .getValue().get(0)));
        System.out.println("");
        break;
    case RESULT_CONTENT:
        pojo2.setResultContent(new BigInteger(queryParameter
                .getValue().get(0)));
        System.out.println("Result Content: " + new BigInteger(queryParameter.getValue().get(0)));
        break;
    case RESPONSE_TYPE:

        ResponseTypeInfo resTypeInfo = new ResponseTypeInfo();
        resTypeInfo.setResponseTypeValue(new BigInteger(queryParameter.getValue().get(0)));
        pojo2.setResponseType(resTypeInfo);
    default:
        System.out.println("DEFUALT");
    }
}

reqPrim.setPojo(pojo);

}else{
    reqPrim.setPojo(null);
}

因此在阅读查询字符串后设置了pojopojo2

现在我想知道是否设置了pojo的任何属性。 一个选项是每次设置pojo属性时将标志设置为true。

有没有有效的方法?

2 个答案:

答案 0 :(得分:0)

您可以实现您的pojo,将地图用作所有属性的容器。然后“任何属性集”转换为在该地图上调用“isEmpty()”。或者您直接使用内置的java properties

答案 1 :(得分:0)

方法1

你可以拿着两张地图MAP<String,Object>这把钥匙将成为pojo字段的名称,而值就是你传递给那个字段的地方,这样你就知道你设置了什么以及你有什么

Map<String,Object> pojoMap= new HashMap<>();
Map<String,Object> pojo2Map= new HashMap<>();
//when ever i set the field i put it in the map
pojo.setCreatedBefore(queryParameter.getValue().get(0));
pojoMap.put("createdBefore",queryParameter.getValue().get(0));
//you can check the field that are set
boolean isCreatedBeforeSet=(pojoMap.get("createdBefore")!=null); 

方法2

你可以使用反射来检查空值,所以你在这里做什么

Map<String,boolean> pojoMap= new HashMap<>();
for(Field field : pojo.getClass().getFields()){
   field.setAccessible(true);
   pojoMap.put(field.getName(),f.get(pojo)!=null); 
}  //now pojoMap has all the names of your fields inside pojo and a boolean value
   // to check if they are null or not