莱州做网站,建网站 北京,网站备案帐号是什么,网站开发前端库ControllerAdvice #xff0c;很多初学者可能都没有听说过这个注解#xff0c;实际上#xff0c;这是一个非常有用的注解#xff0c;顾名思义#xff0c;这是一个增强的 Controller。使用这个 Controller #xff0c;可以实现三个方面的功能#xff1a;全局异常处理全局… ControllerAdvice 很多初学者可能都没有听说过这个注解实际上这是一个非常有用的注解顾名思义这是一个增强的 Controller。使用这个 Controller 可以实现三个方面的功能全局异常处理全局数据绑定全局数据预处理灵活使用这三个功能可以帮助我们简化很多工作需要注意的是这是 SpringMVC 提供的功能在 Spring Boot 中可以直接使用下面分别来看。全局异常处理使用 ControllerAdvice 实现全局异常处理只需要定义类添加该注解即可定义方式如下ControllerAdvicepublic class MyGlobalExceptionHandler { ExceptionHandler(Exception.class) public ModelAndView customException(Exception e) { ModelAndView mv new ModelAndView(); mv.addObject(message, e.getMessage()); mv.setViewName(myerror); return mv; }}在该类中可以定义多个方法不同的方法处理不同的异常例如专门处理空指针的方法、专门处理数组越界的方法...也可以直接向上面代码一样在一个方法中处理所有的异常信息。ExceptionHandler 注解用来指明异常的处理类型即如果这里指定为 NullpointerException则数组越界异常就不会进到这个方法中来。全局数据绑定全局数据绑定功能可以用来做一些初始化的数据操作我们可以将一些公共的数据定义在添加了 ControllerAdvice 注解的类中这样在每一个 Controller 的接口中就都能够访问导致这些数据。使用步骤首先定义全局数据如下ControllerAdvicepublic class MyGlobalExceptionHandler { ModelAttribute(name md) public MapString,Object mydata() { HashMapString, Object map new HashMap(); map.put(age, 99); map.put(gender, 男); return map; }}使用 ModelAttribute 注解标记该方法的返回数据是一个全局数据默认情况下这个全局数据的 key 就是返回的变量名value 就是方法返回值当然开发者可以通过 ModelAttribute 注解的 name 属性去重新指定 key。定义完成后在任何一个Controller 的接口中都可以获取到这里定义的数据RestControllerpublic class HelloController { GetMapping(/hello) public String hello(Model model) { MapString, Object map model.asMap(); System.out.println(map); int i 1 / 0; return hello controller advice; }}全局数据预处理考虑我有两个实体类Book 和 Author分别定义如下public class Book { private String name; private Long price; //getter/setter}public class Author { private String name; private Integer age; //getter/setter}此时如果我定义一个数据添加接口如下PostMapping(/book)public void addBook(Book book, Author author) { System.out.println(book); System.out.println(author);}这个时候添加操作就会有问题因为两个实体类都有一个 name 属性从前端传递时 无法区分。此时通过 ControllerAdvice 的全局数据预处理可以解决这个问题解决步骤如下:1.给接口中的变量取别名PostMapping(/book)public void addBook(ModelAttribute(b) Book book, ModelAttribute(a) Author author) { System.out.println(book); System.out.println(author);}2.进行请求数据预处理在 ControllerAdvice 标记的类中添加如下代码:InitBinder(b)public void b(WebDataBinder binder) { binder.setFieldDefaultPrefix(b.);}InitBinder(a)public void a(WebDataBinder binder) { binder.setFieldDefaultPrefix(a.);}InitBinder(b) 注解表示该方法用来处理和Book和相关的参数,在方法中,给参数添加一个 b 前缀,即请求参数要有b前缀.3.发送请求请求发送时,通过给不同对象的参数添加不同的前缀,可以实现参数的区分.总结这就是松哥给大伙介绍的 ControllerAdvice 的几个简单用法这些点既可以在传统的 SSM 项目中使用也可以在 Spring Boot Spring Cloud 微服务中使用欢迎大家有问题一起讨论。关注牧码小子后台回复 Java 领取松哥为你精心准备的Java干货往期文章一览1、推荐一个技术圈子Java技能提升就靠它了2、Spring Cloud 教程合集3、Redis教程4、MongoDB教程合集5、Git教程合集你点的每个在看我都认真当成了喜欢