业务逻辑中需要将对象中为空字符串的属性转换为null,简单的一种方式是前端JS控制,如果为空字符串则不传到后台,后台接收到没有值的属性默认为null。这种方式会导致JS繁琐。下面用后台通过反射的方式来解决此问题。
public static <T> T setNullValue(T source) throws IllegalArgumentException, IllegalAccessException, SecurityException {
Field[] fields = source.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.getGenericType().toString().equals(
"class java.lang.String")) {
field.setAccessible(true);
Object obj = field.get(source);
if (obj != null && obj.equals("")) {
field.set(source, null);
} else if (obj != null) {
String str = obj.toString();
str = StringEscapeUtils.escapeSql(str);//StringEscapeUtils是commons-lang中的通用类
field.set(source, str.replace("\\", "\\" + "\\").replace("(", "\\(").replace(")", "\\)")
.replace("%", "\\%").replace("*", "\\*").replace("[", "\\[").replace("]", "\\]")
.replace("|", "\\|").replace(".", "\\.").replace("$", "\\$").replace("+", "\\+").trim()
);
}
}
}
return source;
}
只需要在处理业务前调用一下上述方法即可。