,,SpringMVC @ControllerAdvice使用场景

,,SpringMVC @ControllerAdvice使用场景

本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • spring注解和springmvc的注解,SpringMVC常用注解
  • spring注解和springmvc的注解,SpringMVC常用注解,详解springmvc常用5种注解
  • spring ioc以及aop原理,springmvc aop原理
  • spring ioc以及aop原理,springmvc aop原理,深入浅析Spring 的aop实现原理
  • ,,使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
  • ,,springmvc字符编码过滤器CharacterEncodingFilter的使用
  • 关于mybatis面试题,spring springmvc mybatis面试题
  • spring调用beanjava,springmvc获取bean
  • springmvc实现文件上传,spring mvc 上传文件
  • springmvc常用注解,springmvc的工作原理
  • 不学servlet直接学Springmvc,编写servlet类的步骤
  • Spring事务的实现方式和原理以及隔离级别-,springmvc事务隔离级别
  • SpringMVC常用注解,SpringMVC 常用注解都有哪些
  • springmvc工作流程简述,简述springMVC工作流程
  • springmvc常见问题,springmvc解决了什么问题
  • 留言与评论(共有 条评论)
       
    验证码: