1、@ResponseStatus 注解
将spring的异常映射到HttpStatus上去
2、@ExceptionHandler 注解
处理控制器抛出的 异常,自己定义到方法上;
eg:@ExceptionHandler(Exception.class)
public String handleException(){
return error/exception;
}
解释:在改controller中,当出现Exception异常时,自动定位到error/exception;页面去
3、@ControllerAdvice 控制器通知
带有注解,@ExceptionHandler 、@InitBinder、@ModelAttribute 注解的方法,
在带有@ControllerAdvice 注解的类中,以上带有注解的方法,都会应用到整个应用中带有@RequestMapping的方法上;
@ControllerAdvice 本身就带有@Componment
4、重定向时,model中的数据没发重定向:解决方法有两种
1、使用url模板以路径变量和/或查询参数的形式传递数据
2、通过flash属性发送数据
1.1、@RequestMapping("getResult)
public String processRegistration(Spitter spitter,Model model){
spitterRepository.save(spitter);
model.addAttribute("spitterId",spitter.getId());
model.addAttribute("userName",spitter.getName());
return "redirect:/spitter/{userName}";
}
如果:userName=wangjun
解释:重定向结果:/spitter/wangjun?spitterId=12 spitterId会作为参数带入重定向的请求中
注意:此种情况下:重定向带入的参数即spitterId 只能是string和数字的值
2.1、flash属性的发送
即工作过程:将属性装到会话中,请求转发后,把会话中的请求在放回model中
eg:@RequestMapping
public String processRegistration(Spitter spitter,RedirectAttribute model){
spitterRepository.save(spitter);
model.addAttribute("userName",spitter.getName());
model.addFlashAttribute("spitter",spitter);
return "redirect:/spitter/{userName}";
}
转发后的controller 取数据的时候:直接从model中取数据
model.getAttribute("spitter");
5、自定义servlet 和filter
1、public class MyServletInitializer implements WebApplicationInitializer{
@Override
public void onStartUp(ServletContext servletContext){
Dynamic myServlet = servletContext.addServlet("myServlet",MyServlet.class);//增加servlet
myServlet.addMapping("/custom/**");//映射servlet
}
}