Java对返回的对象各类型属性(String,List)的值处理工具类

背景:最近做项目时发现调用接口后,返回对象中的值有的空格未处理,字段超长,但是下游系统又有格式要求,不能为null 不能有空格,还有一些字段为null时报文中字段缺失等
写了个小工具类,对返回的对象统一处理下,上代码

package util;

import org.apache.commons.lang.StringUtils;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class ClassBaseUtil {

    /**
     *  对返回的对象属性赋值 包括 String List
     *  ① 对于有值的属性 去除空格
     *  ② 对返回为null 的处理为 ""
     *
     *  涉及知识点
     *  Class 类
     *  getDeclaredFields() 返回的数组 Field对象反映此表示的类或接口声明的所有字段 类对象。
     *  isAssignableFrom(类<?> cls) 确定由此 类对象表示的类或接口是否与由指定的Class 类表示的类或接口相同或是超类或 类接口。
     *
     *  Field 类
     *  setAccessible(true) 当isAccessible()的结果是false时不允许通过反射访问该字段
     *                      当该字段时private修饰时isAccessible()得到的值是false,必须要改成true才可以访问
     *  getGenericType() 返回一个 Type对象,它表示由该表示的字段的声明类型 Field对象。
     *  getType() 返回一个 类对象标识了此表示的字段的声明类型 Field对象。
     *
     *  ParameterizedType 接口
     *  getActualTypeArguments() 返回一个表示此类型的实际类型参数的数组 Type对象。
     *
     */
    public static void  resetClass(Object obj, Class<?> clazz){
        if(clazz != null){
            try{
                Field[] fields = clazz.getDeclaredFields();
                for (Field field : fields) {
                    field.setAccessible(true);
                    if (null == field.get(obj)) {
                        if("class java.lang.String".equals(field.getGenericType().toString())){
                            field.set(obj,"");
                        }else if("interface java,util.List".equals(field.getType().toString())){
                            List list = new ArrayList();
                            if(List.class.isAssignableFrom(field.getType())){
                                Type type = field.getGenericType();
                                if(type instanceof ParameterizedType){
                                    Class c = (Class) ((ParameterizedType) type).getActualTypeArguments()[0];
                                    Object o = c.newInstance();
                                    resetClass(o,c);
                                    list.add(o);
                                    field.set(obj,list);
                                }
                            }
                        }
                    }else{
                        // 返回值非空 null -> "" 去空格
                        if("class java.lang.String".equals(field.getGenericType().toString())){
                            if(StringUtils.isBlank(field.get(obj).toString().trim())){
                                field.set(obj,"");
                            }else{
                                String value = field.get(obj).toString().trim();
                                field.set(obj,value);
                            }
                        }else if("interface java,util.List".equals(field.getType().toString())){
                            List list = new ArrayList();
                            if(List.class.isAssignableFrom(field.getType())) {
                                Type type = field.getGenericType();
                                if (type instanceof ParameterizedType) {
                                    Class c = (Class) ((ParameterizedType) type).getActualTypeArguments()[0];
                                    ArrayList infoList = (ArrayList) field.get(obj);
                                    for (Object o : infoList){
                                        resetClass(o,c);
                                        list.add(o);
                                    }
                                    field.set(obj,list);
                                }
                            }
                        }

                    }
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音乐土豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值