下面给出详细的springMvc全局异常的实现攻略。
实现过程
1. 创建异常处理类
创建一个类并实现HandlerExceptionResolver
接口,该接口提供了一个resolveException
方法,用于处理异常。
@Component
public class CustomExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView mv = new ModelAndView();
mv.addObject("message", ex.getMessage());
mv.setViewName("error");
return mv;
}
}
可以看到,在实现resolveException
方法时,我们可以创建一个ModelAndView
对象用于返回异常信息和异常视图页面,以便前端展示。
2. 配置异常处理类
在Spring MVC的配置文件中配置异常处理类,使得异常处理类生效。配置代码如下:
<bean class="com.example.CustomExceptionHandler" />
在Spring Boot项目中,可以使用注解的方式将异常处理类添加到Spring容器中:
@Component
public class CustomExceptionHandler implements HandlerExceptionResolver {
// ...
}
3. 抛出异常
当系统出现异常时,我们需要使用throw
关键字手动抛出异常。当然,我们也可以在系统内部进行异常处理并且返回封装好的ModelAndView
对象,以便前端展示。
下面是使用throw
手动抛出异常的代码示例:
@Controller
public class UserController {
@Autowired
private UserService userService;
// ...
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public ModelAndView getUserById(@PathVariable("id") int id) throws Exception {
User user = userService.getUserById(id);
if (user == null) {
throw new Exception("该用户不存在!");
}
ModelAndView mv = new ModelAndView();
mv.addObject("user", user);
mv.setViewName("user");
return mv;
}
}
这里我们把异常封装为Exception
类型,并添加了错误信息"该用户不存在!"。
当然,我们也可以自定义一些业务异常来代替系统异常,这样可以更好地体现程序的鲁棒性。以下是自定义的业务异常类:
public class MyException extends Exception {
private static final long serialVersionUID = 1L;
public MyException(String message) {
super(message);
}
}
我们可以在业务方法中抛出MyException
异常。
示例说明
以下是两个示例:
示例1:使用自定义异常
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public ModelAndView getUserById(@PathVariable("id") int id) throws Exception {
User user = userService.getUserById(id);
if (user == null) {
throw new MyException("该用户不存在!");
}
ModelAndView mv = new ModelAndView();
mv.addObject("user", user);
mv.setViewName("user");
return mv;
}
}
当用户不存在时,抛出自定义的MyException
异常,并将错误信息设为"该用户不存在!"。
示例2:使用系统异常
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public ModelAndView getUserById(@PathVariable("id") int id) throws Exception {
User user = userService.getUserById(id);
if (user == null) {
throw new Exception("该用户不存在!");
}
ModelAndView mv = new ModelAndView();
mv.addObject("user", user);
mv.setViewName("user");
return mv;
}
}
当用户不存在时,抛出系统异常,并将错误信息设为"该用户不存在!"。
总结
实现Spring MVC全局异常处理,我们需要实现HandlerExceptionResolver
接口,在其中编写异常处理的逻辑。配置异常处理类,使得Spring MVC能够扫描到并生效。当系统出现异常时,我们使用throw
关键字抛出系统异常或自定义业务异常,以便进行异常处理。
以上是springMvc全局异常的实现的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springMvc全局异常的实现 - Python技术站