将Java对象vo中属性为null的转为""

本文介绍了一种在IREPORT中处理查询结果为空的方法,通过自定义方法检查并替换实体类中的null值,确保打印预览时不显示null。此外,还介绍了如何直接在模板中设置以避免显示null。

背景:之所以写这个方法,是因为在用ireport进行打印的时候,如果你查询的结果,实体中的属性为null,那么打印预览的时候会显示一个null,按照要求null是不应该显示,只需要显示空白就可以。写的这个方法就解决了打印时查询的结果中有的实体的属性值为null的现象

public static Object checkNull(Object vo) throws Exception {
        // 获取实体类的所有属性,返回Field数组
        Field[] field = vo.getClass().getDeclaredFields();
        // 获取属性的名字
        for (int i = 0; i < field.length; i++) {
            //可访问私有变量
            field[i].setAccessible(true);
            // 获取属性的名字
            String name = field[i].getName();
            // 获取属性类型
            String type = field[i].getGenericType().toString();
            // 将属性的首字母大写
            name = name.replaceFirst(name.substring(0, 1), name.substring(0, 1)
                    .toUpperCase());

            if (type.equals("class java.lang.String")) {
                // 如果type是类类型,则前面包含"class ",后面跟类名
                Method m = vo.getClass().getMethod("get" + name);
                // 调用getter方法获取属性值
                String value = (String) m.invoke(vo);
                if (!StringUtils.hasValue(value)) {
                    //给属性设值
                    field[i].set(vo, field[i].getType().getConstructor(field[i].getType()).newInstance(""));
                }
            }
        }
        return vo;
    }

彩蛋:其实最后我发现,可以不用写这个方法,可以直接在模板进行勾选和设置,如下图所示:
这里写图片描述

在这里插入图片描述

Java中将VO对象转换为JSON字符串是一种常见的需求,尤其是在处理数据传输或构建RESTful API时。以下是几种常用的方法: ### 使用Hutool工具类 Hutool是一个Java工具类库,它简化了许多常见的开发任务,包括将Java对象转换为JSON字符串。可以按照以下步骤进行转换: ```java // 将对象vo转为JSONObject JSONObject jsonObject = (JSONObject) JSONObject.toJSON(order); // 将对象数据转为字符串 String jsonString = JSON.toJSONString(jsonObject); ``` 这种方法简单且易于使用,适用于快速开发场景[^1]。 ### 使用FastJSON FastJSON是阿里巴巴开源的一个高性能JSON库,支持Java对象与JSON字符串之间的相互转换。以下是具体的使用方法: ```java // 创建Java对象 Person person = new Person(); person.setUname("zhangsan"); person.setAge(20); person.setSex("男"); // Java对象转化成Json格式的字符串 String jsonString = JSONObject.toJSONString(person); // Json格式的字符串转换成Java对象 Person p = JSONObject.toJavaObject(jsonString, Person.class); // Json格式字符串转Json对象 JSONObject jsonObject = JSONObject.parseObject(jsonString); ``` FastJSON以其高性能和易用性著称,适用于对性能有较高要求的应用场景[^2]。 ### 使用Jackson Jackson是另一个广泛使用的JSON处理库,它被集成在Spring MVC中,用于处理JSON数据。以下是使用Jackson进行转换的基本示例: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); // 创建Java对象 Person person = new Person(); person.setUname("zhangsan"); person.setAge(20); person.setSex("男"); // Java对象转化成Json格式的字符串 String jsonString = mapper.writeValueAsString(person); // Json格式的字符串转换成Java对象 Person p = mapper.readValue(jsonString, Person.class); } } ``` Jackson提供了丰富的功能,包括对日期格式的支持等,适合复杂的应用场景[^2]。 ### 处理日期格式 当Java对象中包含日期类型的字段时,通常需要指定日期的格式化方式。以Hutool为例,可以通过自定义`JsonConfig`来实现日期格式的转换: ```java import java.text.SimpleDateFormat; import java.util.Date; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; public class DateJsonValueProcessor implements JsonValueProcessor { private String format = "yyyy-MM-dd"; public Object processArrayValue(Object value, JsonConfig jsonConfig) { return process(value, jsonConfig); } public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { return process(value, jsonConfig); } private Object process(Object value, JsonConfig jsonConfig) { if (value instanceof Date) { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format((Date) value); } return value == null ? "" : value; } } ``` 通过这种方式,可以在转换过程中自动处理日期类型的字段,确保输出的JSON字符串符合预期的日期格式[^3]。 ### 多层List集合的转换 如果需要处理包含多层List集合的Java对象,可以使用Hutool或者FastJSON提供的方法。以Hutool为例,需要引入额外的依赖包,如`commons-beanutils.jar`、`commons-httpclient.jar`、`commons-lang.jar`、`ezmorph.jar`和`morph-1.0.1.jar`[^4]。 ### 总结 不同的JSON处理库各有特点,选择合适的库取决于具体的应用场景和需求。Hutool和FastJSON适合快速开发和高性能需求,而Jackson则更适合复杂的业务逻辑和集成在Spring框架中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值