添加日期转换器(Converter)
public class DataConverter implements Converter<String, Date> {
@Override
public Date convert(String s) {
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.parse(s);
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
配置日期转换器(WebMvcConfigurer)
-
说明
WebMvcConfigurer配置类其实是
Spring
内部的一种配置方式,采用JavaBean
的形式来代替传统的xml
配置文件形式针对框架进行个性化定制,例如:拦截器,类型转化器等等。 -
代码示例
@Component
public class SpringMVCConfig implements WebMvcConfigurer {
//注册日期格式转换
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DataConverter());
}
}
添加拦截器(HandlerInterceptor)
public class LoginInterceptor implements HandlerInterceptor {
/**
* 在控制器方法调用前执行
* 返回值为是否中断
* true:表示继续执行(下一个拦截器或处理器)
* false:则会中断后续的所有操作,所以我们需要使用response来继续响应后续请求
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("==============handler执行前调用interceptor================");
//判断用户是否登录
User userLogin = (User) request.getSession().getAttribute("userLogin");
if (userLogin != null) {
return true;//执行下一个interceptor 或 handler
}
response.sendRedirect("/login.jsp");
return false;//不放行
}
/**
* 在控制器方法调用后,解析视图前调用,我们可以对视图和模型做进一步渲染或修改
* 可在modelAndView中加入数据,比如当前时间
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
/**
* 整个请求完成,即视图渲染结束后调用,这个时候可以做些资源清理工作,或日志记录
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
配置拦截器(WebMvcConfigurer)
@Component
public class SpringMVCConfig implements WebMvcConfigurer {
//日期格式转换
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DataConverter());
}
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
/*
* addPathPatterns():要拦截的内容
* excludePathPatterns():要放行的内容
* */
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login").excludePathPatterns("/");
}
}