类型转换器

默认转换器:

**
**

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

被折叠的 条评论
为什么被折叠?



