本文主要介绍SpringMVC @ControllerAdvice的使用场景,通过示例代码非常详细的介绍,对大家的学习或者工作有一定的参考价值。有需要的朋友可以参考一下。
本文主要介绍SpringMVC @ControllerAdvice的使用场景,通过示例代码非常详细的介绍,对大家的学习或者工作有一定的参考价值。有需要的朋友可以参考一下。
@ControllerAdvice,很多初学者可能没听说过这个标注。其实是很有用的注解。顾名思义,它是一个增强型控制器。有了这个控制器,可以实现三个功能:
全局异常处理
全局数据绑定
全局数据预处理
灵活运用这三个功能可以帮助我们简化很多工作。需要注意的是,这是SpringMVC提供的功能,可以直接在Spring Boot使用。下面我们分开来看。
全局异常处理
使用@ControllerAdvice实现全局异常处理。您只需要定义该类,并且可以通过添加如下注释来定义它:
@ControllerAdvice
公共类MyGlobalExceptionHandler {
@ exception handler(exception . class)
公共模型和视图客户异常(异常e) {
modeland view mv=new modeland view();
mv.addObject('message ',e . getmessage());
mv . set viewname(' my error ');
返回mv;
}
}
在这个类中,你可以定义多个方法,不同的方法处理不同的异常,比如处理空指针的方法,处理数组越界的方法……或者你可以像上面的代码一样,在一个方法中处理所有的异常信息。
@ExceptionHandler批注用于指示异常处理的类型,即如果此处指定了NullpointerException,则数组越界异常不会进入此方法。
全局数据绑定
全局数据绑定函数可用于进行一些初始数据操作。我们可以用@ControllerAdvice注释在类中定义一些公共数据,这样就可以在每个控制器的接口中访问这些数据。
使用这些步骤,首先定义全局数据,如下所示:
@ControllerAdvice
公共类MyGlobalExceptionHandler {
@ModelAttribute(name='md ')
公共映射字符串,对象mydata() {
HashMapString,Object map=new HashMap();
map.put('年龄',99);
Map.put('性别','男性');
返回地图;
}
}
使用@ModelAttribute批注来标记此方法返回的数据是全局数据。默认情况下,这个全局数据的键是返回的变量名,值是方法返回值。当然,开发者可以通过@ModelAttribute标注的name属性重新指定key。
定义完成后,这里定义的数据可以在任何控制器的界面中获得:
@RestController
公共类HelloController {
@GetMapping('/hello ')
公共字符串hello(模型模型){
MapString,Object map=model . asmap();
system . out . println(map);
int I=1/0;
返回“你好控制器建议”;
}
}
全局数据预处理
假设我有两个实体类,Book和Author,它们的定义如下:
公共类图书{
私有字符串名称;
私长价;
//getter/setter
}
公共类作者{
私有字符串名称;
私有整数年龄;
//getter/setter
}
此时,如果我定义一个数据添加接口如下:
@PostMapping('/book ')
public void addBook(图书图书,作者作者){
system . out . println(book);
System.out.println(作者);
}
这时添加操作就会有问题,因为两个实体类都有一个name属性,从前端传过来的时候无法区分。此时,@ControllerAdvice的全局数据预处理可以解决这个问题。
求解步骤如下:
1.接口中的别名变量。
@PostMapping('/book ')
public void addBook(@ model attribute(' b ')Book Book,@ model attribute(' a ')Author Author){
system . out . println(book);
System.out.println(作者);
}
2.预处理请求数据
将以下代码添加到标记为@ControllerAdvice的类中:
@InitBinder('b ')
公共void b(WebDataBinder绑定器){
binder . setfielddefaultprefix(' b . ');
}
@InitBinder('a ')
公共void a(WebDataBinder绑定器){
binder . setfielddefaultprefix(' a . ');
}
@ initbinder ("b ")注释表明该方法用于处理与Book和。在该方法中,将b前缀添加到参数中,即要求参数具有b前缀。
3.发送请求
发送请求时,不同对象的参数可以通过添加不同的前缀来区分。
总结
以上是宋歌给大家介绍的@ControllerAdvice的一些简单用法。这些点可以用于传统的SSM项目和Spring Boot春天云微服务。如果您有任何问题,欢迎与我们讨论。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。