zoukankan      html  css  js  c++  java
  • SpringMvc4.x--@ControllerAdvice注解

    通过@ControllerAdvice。我们可以将对于控制器的全局配置放置在同一个位置,注解了@ControllerAdvice的类的方法可以使用@ExceptionHandler@InitBinder@ModelAttribute注解到方法上,这对所有注解了@RequestMapping的控制器内的方法有效。

    @ExceptionHandler:用于全局处理控制器里面的异常。
    @InitBinder:用来设置WebDataBinderWebDataBinder用来自动绑定前台请求参数到Model中。
    @ModelAttribute@ModelAttribute本来的作用是绑定键值对到Model里,此处是让全局的@RequestMapping都能获得在此处设置的键值对。

    下面将使用@ExceptionHandler处理全局异常,将异常信息更加人性化的输出给用户。

    @ControllerAdvice


    @ControllerAdvice 
    public class ExceptionHandlerAdvice { 
    
        @ExceptionHandler(value = Exception.class)
        public ModelAndView exception(Exception exception, WebRequest request) {
            ModelAndView modelAndView = new ModelAndView("error");// error页面
            modelAndView.addObject("errorMessage", exception.getMessage());
            return modelAndView;
        }
    
        @ModelAttribute 
        public void addAttributes(Model model) {
            model.addAttribute("msg", "额外信息"); 
        }
    
        @InitBinder 
        public void initBinder(WebDataBinder webDataBinder) {
            webDataBinder.setDisallowedFields("id"); 
        }
    }

    ① @ControllerAdvice声明一个控制器建言,@ControllerAdvice组合了@Component注解,所以自动注册为Spring的Bean
    ② @ExceptionHandler在此处定义全局处理,通过@ExceptionHandlervalue属性可过滤拦截的条件,在此处可以看出拦截的是所有的Exception
    ③ 此处使用@ModelAttribute注解将键值对添加到全局,所有注解了@RequestMapping的方法可获得此键值对。
    ④ 通过@InitBinder注解定制WebDataBinder

    演示@ModelAttribute


    @Controller
    public class AdviceController {
        @RequestMapping("/advice")
        public String getSomething(@ModelAttribute("msg") String msg,DemoObj obj){
    
            throw new IllegalArgumentException("非常抱歉,参数有误/"+"来自@ModelAttribute:"+ msg);
        }
    }

    演示@ExceptionHandler


    在访问 /advice的时候,抛出了异常,直接调转到了error.jsp页面

     注意点:我在测试的时候,error.jsp里面el表达式的值取不出来,拿不到后台传过来的值。后来找到的原因是:web.xml的头内容版本是2.3的话默认jsp不开启el解析,需要开启解析,在error.jsp头部增加如下配置:

    <%@ page isELIgnored="false" %>

    增加上面的配置之后问题就解决了。

    转载:人生设计师

    github地址:点击查看
    码云地址:点击查看

  • 相关阅读:
    《深入了解 Linq to SQL》之对象的标识 —— 麦叔叔呕心呖血之作
    闲聊吉日与水军
    谈谈需求的变更
    ALinq BUG & 版本发布
    Linq to SQL (ALinq) 也来AOP —— ALinq Inject 博客园首发
    使用Orachard与Bootstrap建站心得
    一位软件作者的吐嘈——读《Google Reader猝死启示录:互联网无法永远免费》有感
    被神化的架构和被夸大的CTRL+C、CTRL+V
    我对程序员技能的一些认识
    又见ORM跑分 —— 对ORM跑分的吐嘈
  • 原文地址:https://www.cnblogs.com/dsitn/p/7203226.html
Copyright © 2011-2022 走看看