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春天云微服务。如果您有任何问题,欢迎与我们讨论。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

SpringMVC @ControllerAdvice使用场景