我有这个拥有大量字符串的模型类。我想在将它们发送到JSP之前清理每个字符串。这是我的代码:
public static void sanitize(Object obj) {
for (Field field : obj.getClass().getDeclaredFields()) {
if (field.getType().isAssignableFrom(String.class)) {
String name = Character.toUpperCase(field.getName().charAt(0)) + field.getName().substring(1);
Method getter;
Method setter;
try {
getter = obj.getClass().getDeclaredMethod("get" + name);
setter = obj.getClass().getDeclaredMethod("set" + name, field.getType());
setter.invoke(obj.getClass().newInstance(),
sanitizeString(getter.invoke(obj.getClass().newInstance())));
log.info("Done");
} catch (Exception e) {
log.error("{}", e);
}
}
}
}
问题: setter调用行正在抛出一个Instantiation异常。现在,我知道运行时对象类可能没有no-args构造函数。
有什么方法可以避免这种情况吗?构建一个no-args构造函数会有帮助吗?
谢谢!
答案 0 :(得分:0)
setter.invoke(obj.getClass().newInstance(),
sanitizeString(getter.invoke(obj.getClass().newInstance())));
您正在创建对象类的新实例,并在其上调用getter和setter。你的意图几乎肯定是在原始对象上调用getter和setter。为此,您应该将原始对象传递给invoke()
:
setter.invoke(obj, sanitizeString(getter.invoke(obj)));