zoukankan      html  css  js  c++  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就都不需要再判断了
  • 相关阅读:
    单播、广播和多播IP地址
    nagios安装部署及详细配置说明(转)
    centos6.5下cacti部署说明
    HAproxy配置详解
    mysql全量和增量备份详解(带脚本)
    lvs原理及安装部署详解(参考)
    curl命令的用法
    mysql日志解析
    MySQL查看和修改表的存储引擎
    mysql备份和还原
  • 原文地址:https://www.cnblogs.com/cybg/p/15223278.html
Copyright © 2011-2022 走看看