`
jy03100000
  • 浏览: 34251 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Springboot整合(5)——全局异常处理

 
阅读更多

Springboot整合(5)——全局异常处理

1. 编写BaseController,在BaseController中使用@ExceptionHandler做异常的逻辑处理

publicclass BaseController {

    protected Logger logger = LoggerFactory.getLogger(getClass());

    /**

     * 运行时异常

     */

    @ExceptionHandler({ RuntimeException.class })

    @ResponseBody

    public ReturnResult otherException(RuntimeException exception) {

        exception.printStackTrace();

        returnnew ReturnResult(0, "服务器内部错误!");

    }

}

 

2. 编写UserController继承BaseController (注意把之前写在indexController里用于测试的@RequestMapping(value = "user/list")删除)

@Controller

publicclass UserController extends BaseController {

 

    privatestaticfinal Log LOG = LogFactory.getLog(UserController.class);

 

    @Resource

    private UserService userService;

 

    @RequestMapping(value = "user/add", method = { RequestMethod.GET, RequestMethod.POST })

    public String add() {

        return"user/add";

    }

 

    @RequestMapping(value = "api/user/add", method = { RequestMethod.PUT, RequestMethod.POST })

    @ResponseBody

    public ReturnResult add(SysUser user) {

        returnuserService.add(user);

    }

 

    @RequestMapping(value = "user/list", method = { RequestMethod.GET, RequestMethod.POST })

    public ModelAndView list() {

        Map<String, Object> model = new HashMap<String, Object>();

        model.put("result", userService.list());

        return new ModelAndView("user/list", model);

    }

}

 

3. list.jspadd.jsp

list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()

            + path + "/";

%>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>user list</title>

</head>

<body>

    <table border=1>

        <tr>

            <th>UserName</th>

            <th>Mobilephone</th>

            <th>LoginName</th>

        </tr>

        <c:forEach items="${result.data.list}" var="user">

            <tr>

                <td align="center">${user.userName }</td>

                <td align="center">${user.mobilephone }</td>

                <td align="center">${user.loginName }</td>

            </tr>

        </c:forEach>

    </table>

    <a href="<%=basePath%>/user/add">Add</a>

</body>

</html>

 

add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()

            + path + "/";

%>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script src="<%=basePath%>vendors/jquery/jquery.min.js"></script>

<title>add user</title>

<script type="text/javascript">

    function add() {

        var url = "<%=basePath%>/api/user/add";

        var datas = {

            userName : $("#userName").val(),

            loginName : $("#loginName").val(),

            loginPassword : $("#loginPassword").val(),

            mobilephone : $("#mobilephone").val(),

        };

 

        $.ajax({

            type : 'POST',

            cache : false,

            url : url,

            data : datas,

            async : false,

            success : function(result) {

                $("#message").html(result.message);

                if (result.code == 1) {

                    window.location = "<%=basePath%>user/list";

                }

            },

            error : function(result) {

                alert(result);

            }

        });

    }

</script>

</head>

<body>

    <form id="loginForm" action="<%=basePath%>api/user/add" method="post">

        userName : <input type="text" id="userName" name="userName"><br>

        loginName : <input type="text" id="loginName" name="loginUsername"><br>

        loginPassword : <input type="text" id="loginPassword" name="loginPassword"><br>

        mobilephone : <input type="text" id="mobilephone" name="mobilephone"><br>

        <a href="javascript:add();">Submit</a> <a href="<%=basePath%>/user/list">Return</a>

    </form>

<p id="message"></p>

</body>

</html>

4. 测试,正常情况下,运行正常。

5. 非正常情况下,如在service中添加异常代码,该异常会被全局异常捕获,前台提示服务器异常

 
 

补充:本节写的有点凌乱,这里理一下整体思路:

BaseController作为所有Controller的基类,使用ExceptionHandler注解对所有的异常做统一处理,包括mapperdao层),serviec层,controller层的异常。

当前因为还没有整合数据校验和shiro,所以BaseController中只处理了运行时异常。之后随着进一步整合会加入其他异常处理,当然,还可以根据自己项目做自定义异常的处理

所有异常都使用了ResponseBody注解,仅返回数据不返回视图。本文的整体设计为前台统一使用ajax访问后台逻辑。如果全部用视图方式返回,就不需要用ResponseBody注解,可以根据项目自行调整。

返回结果全部用ReturnResult封装,便于前端做统一处理。本文主旨在于探讨后端的设计思路,固前端不会给出详细代码设计,可以给一个简单的设计思路:编写一个公用jsp,写入一个隐藏域(model dialog),在每次请求后端返回数据后,用这个model dialog显示提示信息。

  • 大小: 17 KB
分享到:
评论

相关推荐

    springboot SSM整合

    综上所述,SpringBoot SSM整合涉及到的核心技术点包括框架间的集成、拦截器的使用、异常处理的全局化以及返回对象的统一化。这些技术的应用能够使项目更加规范,提升开发效率,同时保证了系统的稳定性和用户体验。在...

    【java框架】SpringBoot(7) -- SpringBoot整合MyBatis(csdn)————程序..pdf

    在Java开发中,...总的来说,SpringBoot整合MyBatis使得数据库操作变得更加简单,通过自动配置和依赖注入,大大减少了开发者的工作量。无论是配置模式、注解模式还是混合模式,都能提供高效、便捷的持久层支持。

    SpringBoot+Mybatis整合完整源码

    - 使用统一的异常处理,如全局的 HttpExceptionAdvice,统一处理数据库操作中的异常,提高用户体验。 通过上述步骤,你可以构建一个基于 Spring Boot 和 Mybatis 的简单但完整的 Web 应用。学习和理解这一整合,...

    深入学习SpringBoot微服务框架(csdn)————程序.pdf

    10、SpringBoot整合Mybatis 整合Mybatis包括引入Mybatis和相关依赖,配置数据源,指定Mapper文件和Dao接口的路径。 11、SpringBoot测试 SpringBoot提供测试支持,可以通过引入test依赖,并使用SpringBoot的测试注解...

    springboot-hibernate-strruts2_springboot_struts2_hibernate_整合_源码

    这个名为"springboot-hibernate-strruts2_springboot_struts2_hibernate_整合_源码"的压缩包文件,显然包含了将Spring Boot与Struts2和Hibernate整合的示例代码或项目模板。下面我们将详细讨论如何进行这种整合以及...

    毕业设计:基于VaadinFlow+SpringBoot的宿舍管理系统.zip

    对于异常处理,SpringBoot提供了@ControllerAdvice和@ExceptionHandler注解,可以全局统一处理异常。日志方面,SpringBoot默认集成了Logback或Log4j,可以方便地进行日志输出和管理。 此外,为了提高系统的可测试性...

    基于springboot图书管理系统.zip

    SpringBoot提供了@ControllerAdvice和@ExceptionHandler注解,方便全局处理异常。 10. 性能优化: 为了提升系统性能,可以考虑使用缓存技术如Redis,将常用数据存储在内存中,减少数据库访问。此外,通过...

    基于springboot的校园疫情防控系统源码数据库.zip

    7. **异常处理**:学习如何配置全局异常处理,提供友好的错误提示。 8. **日志记录**:了解如何使用Logback或Log4j进行日志记录,以便调试和问题排查。 9. **单元测试**:观察JUnit和Mockito等工具如何用于编写测试...

    springboot大学城水电管理系统.zip

    7. **异常处理**:在SpringBoot中,可以通过@ControllerAdvice和@ExceptionHandler注解实现全局的异常处理,统一返回友好的错误信息,提高用户体验。 8. **日志管理**:系统采用Logback或Log4j等日志框架,记录系统...

    基于springboot的新闻资讯系统源码数据库.doc

    5. **异常处理**:通过SpringBoot提供的全局异常处理器对运行时可能出现的异常进行统一处理。 6. **日志记录**:利用SpringBoot集成的日志框架记录系统运行时的日志信息,便于后续的问题排查。 7. **测试**:进行...

    毕设项目:基于springboot+vue开发的宿舍管理系统.zip

    8. **异常处理与日志记录**:使用Spring Boot的全局异常处理和日志框架(如Logback或Log4j),记录系统运行中的异常信息和操作日志,便于问题排查和系统优化。 这个项目对于学习SpringBoot和Vue的开发者来说,是一...

    dubbo——与spring boot整合1

    在本篇内容中,我们将探讨如何将Apache Dubbo与Spring Boot进行整合,创建一个服务提供者(Provider)和一个服务消费者(Consumer)。首先,我们来理解一下这两个关键组件的定义:服务提供者是指实现了特定接口并...

    基于springboot+vue实现的在线考试系统+源代码+文档

    1. 数据存储:SpringBoot整合了JPA(Java Persistence API)和MyBatis,可以方便地操作数据库,进行数据的增删改查。 2. RESTful API:通过Spring Boot的@RestController注解,构建RESTful接口,与前端进行交互。 3....

    Springboot+vue的宾馆客房预定管理系统 Javaee项目,springboot vue前后端分离项目

    综上,本项目展示了SpringBoot与Vue.js的深度整合,实现了宾馆客房预定管理系统的功能,同时也展现了现代Web应用开发的主流模式。通过学习这个项目,开发者可以深入理解前后端分离架构的设计思想,提升自己的技能...

    详解SpringBoot 快速整合Mybatis(去XML化+注解进阶)

    总之,通过SpringBoot整合Mybatis并采用注解的方式,我们可以抛弃XML配置文件,实现更加简洁和高效的开发模式。同时,利用Mybatis的映射注解,可以轻松处理对象属性与数据库字段的映射问题,使代码更加整洁,降低...

    fleakmarket后台代码.zip

    6. **异常处理**:后台代码通常包含全局的异常处理机制,比如使用@ControllerAdvice和@ExceptionHandler注解,确保在遇到异常时能够优雅地返回错误信息,而不是直接抛出堆栈跟踪。 7. **日志记录**:SpringBoot内置...

    客户信息管理系统源码(java毕业设计框架springboot+mysql+vue完整源码+LW+说明文档).zip

    《客户信息管理系统源码解析——基于Java Springboot+MySQL+Vue技术栈》 客户信息管理系统是一种常见的企业级应用,用于高效地存储、管理和分析客户数据,以提升服务质量、优化业务流程。本系统采用现代Web开发的...

    springboot-txlcn.rar

    这就引出了我们的主题——"springboot-txlcn.rar",它是一个整合了Spring Boot、Spring Cloud以及TX-LCN分布式事务框架的示例项目。 首先,让我们深入了解一下Spring Boot。Spring Boot是由Pivotal团队提供的全新...

    百度开源的分布式 ID 生成器,太强大了!(csdn)————程序.pdf

    《深入理解百度开源的分布式ID生成器UidGenerator》 在分布式系统中,生成全局唯一ID是一...将其整合到SpringBoot和MyBatis项目中,可以方便地为系统提供全局唯一的ID服务,为现代分布式系统的构建提供了有力的工具。

Global site tag (gtag.js) - Google Analytics