Spring MVC的@ControllerAdvice注解

矫情吗;* 2021-07-24 17:20 584阅读 0赞

一 视图

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>异常处理示例</title>
  8. <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
  9. <script type="text/javascript">
  10. $(function(){
  11. $("#search").click(function(){
  12. $.post("${pageContext.request.contextPath}/search",null,
  13. function(data){
  14. // 处理异常
  15. if (data.message)
  16. {
  17. alert("与服务器交互出现异常:" + data.message);
  18. }
  19. else
  20. {
  21. // 获取服务器响应,显示所有订单信息
  22. }
  23. },"json");
  24. });
  25. })
  26. </script>
  27. </head>
  28. <body>
  29. <a href="find">@ControllerAdvice异常处理</a>
  30. <hr>
  31. <button id="search">查询订单(返回JSON)</button>
  32. </body>
  33. </html>

二 控制器及其处理类

1 BookController

  1. package org.fkit.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. @Controller
  5. public class BookController{
  6. @GetMapping("/find")
  7. public String find() throws Exception{
  8. int i = 5/0;
  9. return "success";
  10. }
  11. }

2 OrderController

  1. package org.fkit.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.PostMapping;
  4. @Controller
  5. public class OrderController {
  6. @PostMapping("/search")
  7. public String search() throws Exception{
  8. try {
  9. int i = 5/0;
  10. return "success";
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. throw new OrderException("订单查询失败!");
  14. }
  15. }
  16. }

3 OrderException

  1. package org.fkit.controller;
  2. public class OrderException extends RuntimeException {
  3. public OrderException() {
  4. super();
  5. // TODO Auto-generated constructor stub
  6. }
  7. public OrderException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
  8. super(message, cause, enableSuppression, writableStackTrace);
  9. // TODO Auto-generated constructor stub
  10. }
  11. public OrderException(String message, Throwable cause) {
  12. super(message, cause);
  13. // TODO Auto-generated constructor stub
  14. }
  15. public OrderException(String message) {
  16. super(message);
  17. // TODO Auto-generated constructor stub
  18. }
  19. public OrderException(Throwable cause) {
  20. super(cause);
  21. // TODO Auto-generated constructor stub
  22. }
  23. }

4 GlobalExceptionHandler

  1. package org.fkit.controller;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.springframework.web.bind.annotation.ControllerAdvice;
  5. import org.springframework.web.bind.annotation.ExceptionHandler;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import org.springframework.web.servlet.ModelAndView;
  8. @ControllerAdvice
  9. public class GlobalExceptionHandler {
  10. // 处理Exception类型异常
  11. @ExceptionHandler(value = Exception.class)
  12. public ModelAndView globalErrorHandler(Exception e) throws Exception {
  13. ModelAndView mav = new ModelAndView();
  14. mav.addObject("ex", e);
  15. mav.setViewName("error");
  16. return mav;
  17. }
  18. // 处理OrderException自定义异常
  19. @ExceptionHandler(value = OrderException.class)
  20. @ResponseBody
  21. public Object OrderErrorHandler(Exception e) throws Exception {
  22. // 创建返回对象Map并设置属性,会被@ResponseBody注解转换为JSON返回
  23. Map<String, Object> map = new HashMap<>();
  24. map.put("code", 100);
  25. map.put("message", e.getMessage());
  26. map.put("data", "请求失败");
  27. return map;
  28. }
  29. }

三 配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc.xsd
  12. http://www.springframework.org/schema/context
  13. http://www.springframework.org/schema/context/spring-context.xsd">
  14. <!-- spring可以自动去扫描base-pack下面的包或者子包下面的java文件,
  15. 如果扫描到有Spring的相关注解的类,则把这些类注册为Spring的bean -->
  16. <context:component-scan base-package="org.fkit.controller"/>
  17. <!-- 默认配置方案 -->
  18. <mvc:annotation-driven/>
  19. <!-- 静态资源处理 -->
  20. <mvc:default-servlet-handler/>
  21. <!-- 视图解析器 p:prefix属性表示前缀 p:suffix 表示后缀 -->
  22. <bean id="viewResolver"
  23. class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  24. p:prefix="/WEB-INF/content/" p:suffix=".jsp"/>
  25. </beans>

四 测试

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70 1

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70 2

发表评论

表情:
评论列表 (有 0 条评论,584人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ControllerAdvice注解使用

    为了方便对异常的统一管理,spring mvc提供了ControllerAdvice注解对异常进行统一的处理,拿到这些异常信息后,可以做一些处理,比如提供一个统一的web界面查