[ 日期类型转换器 ]
在向数据库中插入一条日期类型的数据时, 报错:
报错信息说的是java.sql.Date类型数据无法转换, 因为POJO类中该数据类型和数据库对应, 是java.sql.Date类型的, 而如果在jsp页面, 添加信息向数据库中
插入一条记录, 如果日期类型的字段不填, 保持为空, 即null, 就会报出以上的错误, 解决方法:
转换器的使用:
1. 创建一个转换器类;
2. 在使用之前注册该转换器.
定义转换器类:
SQLDateConverter.java
package cn.itcast.crm.util; import org.apache.commons.beanutils.Converter; import org.apache.commons.lang.StringUtils; public class SQLDateConverter implements Converter { /** * @param type: 要转换的对象的数据类型 * @param value: 要转换的数据 */ @SuppressWarnings("rawtypes") @Override public Object convert(Class type, Object value) { if (value == null) { return null; } if (type == null) { return null; } if (type != java.sql.Date.class) { return null; } if (value instanceof String) { String str = (String) value; if (StringUtils.isNotBlank(str)) { return java.sql.Date.valueOf(str); } } return null; } }
在使用该数据之前, 先注册转换器, 把数据类型转换一下再使用就不会报错:
SysUserAction.java
// 保存用户
public String save() throws IllegalAccessException, InvocationTargetException {
// vo-->po
SysUser sysUser = new SysUser();
// 密码加密
MD5keyBean md5keyBean = new MD5keyBean();
String password = md5keyBean.getkeyBeanofStr(sysUserForm.getPassword());
sysUserForm.setPassword(password);
// 注册转换器: 日期类型转换器, 防止不输入日期的时候报错
ConvertUtils.register(new SQLDateConverter(), java.sql.Date.class);
BeanUtils.copyProperties(sysUser, sysUserForm);
// 补全权限组信息
SysRole sysRole = new SysRole();
sysRole.setId(sysUserForm.getRoleId());
sysUser.setSysRole(sysRole);
// 补全部门信息
SysUserGroup sysUserGroup = new SysUserGroup();
if (StringUtils.isNotBlank(sysUserForm.getGroupId())) {
sysUserGroup.setId(Integer.parseInt(sysUserForm.getGroupId()));
}
sysUser.setSysUserGroup(sysUserGroup);
// 调用service保存
sysUserService.saveSysUser(sysUser);
return "listAction";
}