Java反射-获取对象中有值存在的字段名和字段值

·  阅读 1802

最近有一个ES搜索的需求,request有十几个二十个字段,在构建term查询的时候,就需要对每个字段进行空校验然后赋值,于是自己写了个反射获取有值的字段名和字段值并存放到map中,构建term只需要遍历map即可。

/**
     * 反射获取request中有值(但不包含排序、分页字段)的字段名和字段值
     * @return map<k,v> k表示字段名,v表示数据
     */
    public Map<String, Object> getFieldAndValueMap(OrderSearchRequest request) {

        Map<String, Object> map = new HashMap<>();
        Field[] fields = OrderSearchRequest.class.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                if (Objects.nonNull(field.get(request))) {
                    // 跳过不需要统计的字段
                    if (needIgnore(field)) {
                        continue;
                    }
                    map.put(field.getName(), field.get(request));
                }
            } catch (IllegalAccessException e) {
                log.error("convert param error. {}", e.getMessage());
            }
        }
        log.info("receive search field: ");
        map.forEach((k, v) -> log.info("{}:{}", k, v));
        return map;
    }

    private boolean needIgnore(Field field) {
        String fieldName = field.getName();
        return fieldName.equals("sortField")
                || fieldName.equals("sortType")
                || fieldName.equals("pageIndex")
                || fieldName.equals("pageSize")
                || fieldName.equals("searchFieldMap");
    }
复制代码


如果你喜欢我的文章,那麻烦请关注我的公众号,该公众号还处于初始阶段,谢谢大家的支持。

image

想看往期文章, 请点击我的GitHub地址: github.com/fantj2016/j…



分类:
后端
标签: