[email protected]注解

通过@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地址:点击查看
码云地址:点击查看

时间: 2024-10-18 11:02:01

[email protected]注解的相关文章

[email&#160;protected]注解与自动装配

1   配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss 拥有 Office 和 Car 类型的两个属性:       清单 3. Boss.java [java] view plaincopy package com.baobaotao; public class Boss { private Car car; private Office office

springboot情操陶冶[email&#160;protected]注解解析

承接前文springboot情操陶冶[email protected]注解解析,本文将在前文的基础上对@SpringBootApplication注解作下简单的分析 @SpringBootApplication 该注解是springboot最集中的一个注解,也是应用最广泛的注解.官方也多用此注解以启动spring服务,我们看下其中的源码 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inher

s[email&#160;protected]注解

自动将数据封装成json格式的数据返回回去 Maven <!-- Json Begin --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackso

springboot自动装配(1)[email&#160;protected]注解怎么自动装配各种组件

1.对于springboot个人认为它就是整合了各种组件,然后提供对应的自动装配和启动器(starter) [email protected]注解其实就是组合注解,通过它找到自动装配的注解@EnableAutoConfiguration,再由@EnableAutoConfiguration导入自动装配选择类AutoConfigurationImportSelector的selectImports方法去MATA-INF/spring.factories下面找到需要自动装配的组件的对应配置(各种Au

Spring高级话题[email&#160;protected]***注解的工作原理

出自:http://blog.csdn.net/qq_26525215 @EnableAspectJAutoProxy @EnableAspectJAutoProxy注解 激活Aspect自动代理 <aop:aspectj-autoproxy/> 开启对AspectJ自动代理的支持. 在用到AOP的自动代理的时候用,如果你理解了Java的动态代理,很容易的就会熟悉AOP的自动代理的. @EnableAsync @EnableAsync注解开启异步方法的支持. 这个相信大家都比较熟悉的.对于异步

[email&#160;protected] 注解原理与使用

Java反射 java反射机制的定义: 在运行转态时(动态的)时. 对于任意一个类,都能够知道这个类的所有属性和方法 对于任意一个对象,都能够知道调用它的任意属性和方法 Class对象 java中用对象来对现实生活中的事物进行抽象,如人(现实生活)抽象到一个person类(java对象).但有没有想过,java中的类(现实生活)其实也是一个Class对象(对象).因此,这个Class类就包含了所有你定义的Class信息,包括所有的方法(私有,公有).构造器.实现了那些方法.哪些注解信息.所有的属

Spring In [email&#160;protected]注解

//@Component注解会告诉Spring创建这个类的实例bean(注意,启动Component注解功能需要在xml里面配置,下面会将)@Component package com.zte.springinaction.soundsystem.imp; import org.springframework.stereotype.Component; import com.zte.springinaction.soundsystem.CompactDisc; //@Component注解会告诉

Hibernate一些_方法[email&#160;protected]注解_代码示例

操作数据库7步骤 :         1 创建一个SessionFactory对象        2 创建Session对象        3 开启事务Transaction : hibernate中,然后数据库操作,都必须是事务的,哪怕是查询        4 执行数据保存操作(必须提交,才会执行对应的操作方法)        5 提交事务        6 关闭Session                session.close();                getCurrentS

springMVC [email&#160;protected]注解(后台控制器获取参数)

在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取. 1.获取提交的参数: @RequestMapping("testRequestParam") public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) { System.out.pri