今天项目上遇到了一个很令人无语的合作方,他们提供给我的xml中存在大量的类似于:
<test/>
这样的空标签,我以前写的xml解析是不会将空标签显示出来的,不显示就代表没有,代表值为null。但是这样的标签利用JAXB解析进来的值却是"",是的,本来应该被解析为null的值现在被解析成了一个空字符串了!!!
于是,万般无奈的秃头沈开始寻找解决方案,最终锁定了两个备选方案:
1、利用JAXB的监听器实现手动的将空字符串转为null,这样的方式是利用Java中自带的反射实现,具体代码如下:
定义一个自定义的Listener:
import javax.xml.bind.Unmarshaller;
import java.lang.reflect.Field;
public class UnmarshallerListener extends Unmarshaller.Listener {
public static final String BLANK_CHAR = "";
@Override
public void afterUnmarshal(Object target, Object parent) {
super.afterUnmarshal(target, parent);
Field[] fields = target.getClass().getDeclaredFields();
for (Field f : fields) {
f.setAccessib