SpringMVC框架 类型转换器,拦截器

本文介绍了如何在Spring MVC中实现自定义类型转换器,包括将前台的String转换为后台的Date,以及反之。同时,详细展示了如何注册转换器,并通过ConversionServiceFactoryBean管理。接着,讲解了拦截器的使用,包括编写拦截器类、注册拦截器以及通过HandlerInterceptor接口或其适配器实现不同拦截需求。示例中还包含了拦截器的预处理、后处理和完成处理方法的实现。最后,文章提到了在实际应用中,可以结合HandlerInterceptorAdapter简化拦截器的编写。

类型转换器

在这里插入图片描述
默认转换器:
在这里插入图片描述
**在这里插入图片描述
**
在这里插入图片描述
示例:
编写类型转换器
前台String类型转换为后台Date类型

@Component
public class MyDateConvert implements Converter<String, Date> {
    @Override
    public Date convert(String s) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date data = null;
        try {
            data = dateFormat.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return data;
    }
}

后台Date类型转换为前台String类型进行展示

@Component
public class MyDateConvert2 implements Converter<Date,String> {
    @Override
    public String convert(Date s) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String date = dateFormat.format(s);
        return date;
    }
}

注册转换器
注意:
1.必须将类型转换器交给Spring容器管理

    <!--定义类型转换器-->
    <bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="myDateConvert"/><!--页面的String转为后台的Date-->
                <ref bean="myDateConvert2"/><!--后台Date展示为页面String:String格式显示-->
            </set>
        </property>
    </bean>
    <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>

拦截器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例:
编写拦截器类

public class TestIntercept1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("处理方法执行之前preHandle()方法执行!");
        return true;//是否释放请求
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("处理方法执行之后,视图渲染之前postHandle()方法执行!");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("处理方法执行之后,且视图渲染完成afterCompletion()方法执行!");
    }
}

注册拦截器:在mvc配置文件中:

    <!--定义拦截器-->
    <mvc:interceptors>
        <!--注册拦截器对象 方式一 拦截所有controller请求-->
       <!-- <bean class="intercept.TestIntercept1"/>
        <bean class="intercept.TestIntercept2"/>
        <bean class="intercept.TestIntercept3"/>
        <bean class="intercept.TestIntercept4"/>
        <bean class="intercept.TestIntercept5"/>-->
        <!--方式2:自定义拦截请求-->
        <mvc:interceptor>
            <!--拦截test下的所有请求-->
            <mvc:mapping path="/test/**"/>
            <!--不拦截test下的test1请求-->
            <mvc:exclude-mapping path="/test/test1"/>
            <bean class="intercept.TestIntercept1"/>
        </mvc:interceptor>
        <mvc:interceptor>
            <!--添加test下的所有请求-->
            <mvc:mapping path="/test/**"/>
            <!--不拦截test下的test2请求-->
            <mvc:exclude-mapping path="/test/test2"/>
            <bean class="intercept.TestIntercept2"/>
        </mvc:interceptor>
    </mvc:interceptors>

除了实现HandlerInterceptor接口定义拦截器外还可以继承HandlerInterceptorAdapter类来定义拦截器 然后重写你需要的方法:示例
检查用户是否已经登录过

public class SessionInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request.getSession().getAttribute(Val.SESSION_KEY_STUDENT)!= null){
            return true;//登录过放行
        }else{
            response.sendRedirect("/SpringMVClanjieqi/index.jsp");
            return false;//拦截
        }
    }
}

注册拦截器

    <!--配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--拦截student下的所有方法-->
            <mvc:mapping path="/student/**"/>
            <!--不拦截登录方法lofin()-->
            <mvc:exclude-mapping path="/student/login"/>
            <bean class="interceptor.SessionInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值