美文网首页
JAXB如何入null如何生成空节点

JAXB如何入null如何生成空节点

作者: 一只弹窗仔 | 来源:发表于2020-05-19 17:50 被阅读0次

使用Marshaller 把对象转成xml格式,当对象属性为null时,xml不会对应生成空标签,会造成标签缺失。可以使用反射在运行时对于null属性进行操作

public class MarshallerListener extends Marshaller.Listener {
    public static final String BLANK_CHAR = "";

    @Override
    public void beforeMarshal(Object source) {
        super.beforeMarshal(source);
        Field[] fields = source.getClass().getDeclaredFields();
        for (Field f : fields) {
            f.setAccessible(true);
            try {
                if (f.getType() == String.class && f.get(source) == null) {
                    f.set(source, BLANK_CHAR);
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
}
    public String toString() {
        try {
            JAXBContext context = JAXBContext.newInstance(HzBankPayResponse.class);
            Marshaller marshaller = context.createMarshaller();
            // 是否省略xml头信息(<?xml version="1.0" encoding="gb2312" standalone="yes"?>)
            marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
            marshaller.setListener(new MarshallerListener());
            StringWriter writer = new StringWriter();
            marshaller.marshal(this, writer);
            return writer.toString();
        } catch (JAXBException e) {
            return "";
        }
    }

相关文章

网友评论

      本文标题:JAXB如何入null如何生成空节点

      本文链接:https://www.haomeiwen.com/subject/npzbohtx.html