当对表单输入日期时,如2020/1/12,提交后得到
User{uname='杀杀杀', age=111, date=Sun Jan 12 00:00:00 CST 2020}
而若输入2020-1-12,则
HTTP Status 400 – Bad Request
由于springmvc是由组件构成,如适配器,映射器(处理器),前端控制器,因此可以自定义一个类作为数据转换器,实现上述功能。
首先在java中创建converterController,实现数据转换功能
package cn.itcast.utils;
import org.springframework.core.convert.converter.Converter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 把字符串转化成日期
*/
public class StringToDateConverter implements Converter<String,Date>{
/**
*String source 传入进来的字符串
* @param source
* @return
*/
@Override
public Date convert(String source) {
//判断
if(source == null){
//若为空,则返回
throw new RuntimeException("请传入数据");
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
//把字符串转换成日期
return df.parse(source);
} catch (ParseException e) {
//若报错,则返回
throw new RuntimeException("请传入数据");
}
}
}
参考链接:RuntimeException
Dateformat.parse
第二步在java中的controller包中创建新的控制器用来调用该函数:
/**
* 自定义类型转换器
*/
@RequestMapping("/saveUser")
public String saveUser(User user){
System.out.println("执行了。。。");
System.out.println(user);
return "success";
}
}
第三步在webapp中jsp页面设计表单提交页面:
<form action="param/saveUser" method="post">
用户姓名: <input type="text" name="uname"/><br/>
用户年龄: <input type="text" name="age"/><br/>
用户年龄: <input type="text" name="date"/><br/>
<input type="submit" value="提交"/><br/>
</form>
第四步设计前端控制器,在resource中的springmvc.xml中配置自定义类型转换器
<!--配置自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="cn.itcast.utils.StringToDateConverter"/>
</set>
</property>
</bean>
并将其在开启时启动:
<mvc:annotation-driven conversion-service="conversionService"/>
输入2020-1-12,提交运行,print
User{uname=‘冲冲冲’, age=111, date=Sun Jan 12 00:00:00 CST 2020}