spring mvc自定义类型转换器
1.编写一个类,实现转换接口,完成类型转换
DateConverter类:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
/**
* 提供了4种时间格式转换,可以编写代码实现更多格式的转换
* @author lym
* @date 2018/03/20
*/
//Converter<String, Date> 第一个String,原类型;第二个Date,目标类型
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String dateString) {
//可以使用正则表达式判断时间字符串的格式,再使用分支语句进行转换,效率更高安全性更好
Date result = new Date();
String patten = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(patten);
if(dateString != null){
try {
result = sdf.parse(dateString);
} catch (ParseException e) {
// 如果时间格式不是"yyyy-MM-dd HH:mm:ss",则使用"yyyy/MM/dd HH:mm:ss"
patten = "yyyy/MM/dd HH:mm:ss";
sdf.applyPattern(patten);
try {
result = sdf.parse(dateString);
} catch (ParseException e1) {
patten = "yyyy-MM-dd";
sdf.applyPattern(patten);
try {
result = sdf.parse(dateString);
} catch (ParseException e2) {
patten = "yyyy/MM/dd";
sdf.applyPattern(patten);
try {
result = sdf.parse(dateString);
} catch (ParseException e3) {
//格式都不对,默认使用当前时间
}
}
}
}
}
return result;
}
}
2.修改spring mvc配置文件,启用格式转换服务,并使用自定义转换类
<!-- 配置格式转换服务 -->
<bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.neuedu.ssmdemo.converter.DateConverter"/>
</list>
</property>
</bean>
3.修改spring mvc配置文件,启用格式转换服务
<!-- 启用格式 转换服务 -->
<mvc:annotation-driven conversion-service="converterService"/>
4.使用信息的格式化传递参数,检查是否工作正常
@Controller
@RequestMapping("course3")
public class Course3Controller {
private Logger logger = Logger.getLogger(Course3Controller.class);
//可以使用servlet技术进行request.getParameter()
@RequestMapping("/addbatch4")
public void addBatch4(HttpServletRequest request,HttpServletResponse response,ItemBean bean)
throws ServletException, IOException{
logger.info("============1============");
if(bean.getCourses().size()>0&&bean!=null){
logger.info("===========2=============");
for(Course course:bean.getCourses()){
logger.info(course.getCourseId()+","+course.getCourseName()+
","+course.getCourseScore()+","+course.getStartDate());
}
}
//使用servlet技术进行跳转和传递参数
//request.setAttribute("courses", bean.getCourses());//后面使用了重定向,故不能使用request作用域绑定参数
request.getSession().setAttribute("courses", bean.getCourses());//后面使用了重定向,应该使用session传递参数
//request.getSession(true);//当参数为true时,如果没有session则返回新的session;当参数为false时,如果没有session则返回null
//重定向到gotoresult Controller方法
response.sendRedirect("gotoresult.action");//重定向可以使用绝对路径和相对路径进行跳转
}
@RequestMapping("/gotoresult")
public String gotoResult(){
return "result";//请求转发
}
ItemBean类:
import java.util.List;
public class ItemBean {
private List<String > courseId; //使用集合接收单个参数的多个值
private List<Course> courses; //使用集合接收多个参数的值
public List<Course> getCourses() {
return courses;
}
public void setCourses(List<Course> courses) {
this.courses = courses;
}
public List<String> getCourseId() {
return courseId;
}
public void setCourseId(List<String> courseId) {
this.courseId = courseId;
}
}