表现层与前端数据传输协议定义
异常处理
在哪里处理异常?
- 异常要分类处理
- 所有的异常均抛出到表现层进行处理
- 异常要采取AOP思想处理,(表现层处理异常,每个方法中单独书写,代码书写量大且意义不强)
采用spring异常管理器
异常分类
在业务代码层面加入异常识别
前台后台协议联调
拦截器
创建拦截器
@Component
//定义拦截器类,实现HandlerInterceptor接口
//注意当前类必须受Spring容器控制
public class ProjectInterceptor implements HandlerInterceptor {
@Override
//原始方法调用前执行的内容
//返回值类型可以拦截控制的执行,true放行,false终止
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String contentType = request.getHeader("Content-Type");
HandlerMethod hm = (HandlerMethod)handler;
System.out.println("preHandle..."+contentType);
return true;//false将终止被拦截操作的执行,与此同时postHandle,afterCompletion方法也不会执行了
}
@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...");
}
}
配置拦截器
在SpringMvcSupport中继承WebMvcConfigurationSupport类,之后重写addInterceptors /books 表示拦截路径为/books的请求 /books/* 表示拦截已books开头的请求
简化开发
可以直接在SpringMvcConfig中写
拦截器参数
取数据
@Override
//原始方法调用前执行的内容
//返回值类型可以拦截控制的执行,true放行,false终止
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String contentType = request.getHeader("Content-Type"); //取数据
HandlerMethod hm = (HandlerMethod)handler;
System.out.println("preHandle..."+contentType);
return true;
}
拦截器链(多个拦截器)
拦截器执行顺序根据addInterceptorRegisty中的书写顺序来执行

只要有中断,post全部不执行