SpringMVC类型转换:
1 日期类型转换:
private Date birthday;
<label for="">生日:<input type="text" name="birthday" /></label><br />
针对日期类型,springmvc默认没有做类型转换,因此会报告400错误,此时需要配置日期类型转换器
1.1 在pojo层添加注解:@DateTimeFormat()
pattern:日期格式(前端传输的日期也必须是这个格式)
@DateTimeFormat(pattern="yyyy-MM-dd") private Date birthday;
1.2 自定义类型转换器
public class DateConverter implements Converter<String, Date>{ /** * 将字符串转换成日期格式,重写convert方法 */ @Override public Date convert(String source) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { sdf.setLenient(false);//是否宽松解析:默认true return sdf.parse(source); } catch (ParseException e) { e.printStackTrace(); } return null; } }
<!-- 配置注解驱动 --> <mvc:annotation-driven conversion-service="myConversion" />
<!-- 类型转换器 --> <bean id="myConversion" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.roxy.springmvc.converter.DateConverter"></bean> </set> </property> </bean>
1.3 在controller中添加方法
@InitBinder public void initBinder(ServletRequestDataBinder binder){ binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); }
2 对象类型转换:
前端传递的数据为String类型,而后台处理的是对象类型
public class UserConverter implements Converter<String, User>{ /** * 将字符串转换成对象 */ @Override public User convert(String source) { if(source != null) { String[] split = source.split("|"); if(split != null && split.length == 3) { String username = split[0]; Integer age = Integer.parseInt(split[1]); String email = split[2]; String birday = split[3]; User user = new User(); user.setUsername(username); user.setAge(age); user.setEmail(email); return user; } } return null; }
<bean class="com.roxy.springmvc.converter.UserConverter"></bean>