编程语言
首页 > 编程语言> > 空字符串的比较,空指针异常。java将Strin该类型的“null”转换为空,java反射获取对象的所有属性并判断再赋值

空字符串的比较,空指针异常。java将Strin该类型的“null”转换为空,java反射获取对象的所有属性并判断再赋值

作者:互联网

1. 产生原因

 我的设计缘由是因为前端vue填写某个表单时,有的输入项可以不输入,插入时数据库设计的是插入null,于是前端详情界面就由于没有判断,而且vue中{{}}双括号还可以用v-if判断一下,但v-model怎么判断可头疼了,但是更改数据库的设计时下下策,于是采用工具类。将一个类中所有的String类型的“null”字符串转换为空。

  比较"null"时发现一个有趣的事,先上工具类代码

public static Object getObjectNUllValueToEmpty(Object object) throws Exception {

        // 利用反射获取实体类的所有属性,返回Field数组
        /*****import java.lang.reflect.Field;使用这个*******/
        Field[] field = object.getClass().getDeclaredFields();
        try {
            // 遍历所有属性
            for (Field item : field) {
                // 获取属性的名字
                String name = item.getName();
                // 将属性的首字符大写,方便构造get,set方法
                name = name.substring(0, 1).toUpperCase() + name.substring(1);
                // 获取属性的类型
                String type = item.getGenericType().toString();

                //这里仅判断了String类型的属性
                // 如果type是类类型,则前面包含"class ",后面跟类名
                if (type.equals("class java.lang.String")) {
                    Method m = object.getClass().getMethod("get" + name);
                    System.out.println(m);
                    // 调用getter方法获取属性值
                    String value = (String) m.invoke(object);
                    //这里做判断
                    if ("null".equals(value)) {
                        //调用set方法
                        m = object.getClass().getMethod("set" + name, String.class);
                        System.out.println(m);
                        //这里赋值
                        m.invoke(object, "");
                    }
                }


            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return object;
    }

2.有趣的时,现在才发现为什么以前看别人的代码时都反过来写

    if ("null".equals(value))  这句话不能写成if(value.equals("null")),这样会报空指针异常

3.工具类拓展

上面的判断,还可以增加Integer类型的判断,紧接着String的判断写就行

4.使用该工具类

我使用springBoot作为讲解,我们经常会使用以下代码

User userInfo= service.getInfoById(id);
//紧接着使用静态类即可,但由于我返回值是Object,所以得强转为你需要的类型
User userInfoAfterInfo = (User) getObjectNUllValueToEmpty(userInfo)

return Result.OK(userInfoAfterInfo) 


//这样vue无论是{{}}还是v-model就都不需要再判断了

 

标签:属性,java,String,Strin,object,printStackTrace,为空,null,name
来源: https://www.cnblogs.com/cybg/p/15223278.html