@ControllerAdvice增强Controller,里面可以使用三个注解
@ExceptionHandler
@InitBinder
@ModelAttribute
对@RequestMapping注解标记的方法做增强
@RestControllerAdvice 等价于 @ControllerAdvice+@ResponseBody
查看@RestControllerAdvice源码可知,定义上就有@ControllerAdvice和@ResponseBody注解。
@Controller和@RestController亦如此
@Configuration注解其实也标注了@Component元注解,可被Spring容器纳入管理
@RestControllerAdvice功能和@ControllerAdvice功能差不多,只是前者返回的时候要求是JSON格式。
@ControllerAdvice配合 ResponseBodyAdvice接口返回统一格式的数据。
package org.lhzhian.base.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
/**
* 异常统一处理
* @author lhzhian
* @date 2016年4月28日
*/
@ControllerAdvice
public class GlobalExceptionHandler {
private final static String ERROR_PAGE = "error";
@ExceptionHandler(Exception.class)
public ModelAndView handle(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("message", e.getMessage());
mv.setViewName(ERROR_PAGE);
return mv;
}
@ModelAttribute
//应用到所有@RequestMapping注解方法
//此处将键值对添加到全局,注解了@RequestMapping的方法都可以获得此键值对
public void addUser(Model model) {
model.addAttribute("msg", "此处将键值对添加到全局,注解了@RequestMapping的方法都可以获得此键值对");
}
@InitBinder
//应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器
//用来设置WebDataBinder,用于自动绑定前台请求参数到Model中。
public void initBinder(WebDataBinder binder) {
}
}