spring mvc自定义类型转换器

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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值