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.jsp和add.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注解对所有的异常做统一处理,包括mapper(dao层),serviec层,controller层的异常。
② 当前因为还没有整合数据校验和shiro,所以BaseController中只处理了运行时异常。之后随着进一步整合会加入其他异常处理,当然,还可以根据自己项目做自定义异常的处理
③ 所有异常都使用了ResponseBody注解,仅返回数据不返回视图。本文的整体设计为前台统一使用ajax访问后台逻辑。如果全部用视图方式返回,就不需要用ResponseBody注解,可以根据项目自行调整。
④ 返回结果全部用ReturnResult封装,便于前端做统一处理。本文主旨在于探讨后端的设计思路,固前端不会给出详细代码设计,可以给一个简单的设计思路:编写一个公用jsp,写入一个隐藏域(model dialog),在每次请求后端返回数据后,用这个model dialog显示提示信息。
相关推荐
综上所述,SpringBoot SSM整合涉及到的核心技术点包括框架间的集成、拦截器的使用、异常处理的全局化以及返回对象的统一化。这些技术的应用能够使项目更加规范,提升开发效率,同时保证了系统的稳定性和用户体验。在...
在Java开发中,...总的来说,SpringBoot整合MyBatis使得数据库操作变得更加简单,通过自动配置和依赖注入,大大减少了开发者的工作量。无论是配置模式、注解模式还是混合模式,都能提供高效、便捷的持久层支持。
- 使用统一的异常处理,如全局的 HttpExceptionAdvice,统一处理数据库操作中的异常,提高用户体验。 通过上述步骤,你可以构建一个基于 Spring Boot 和 Mybatis 的简单但完整的 Web 应用。学习和理解这一整合,...
10、SpringBoot整合Mybatis 整合Mybatis包括引入Mybatis和相关依赖,配置数据源,指定Mapper文件和Dao接口的路径。 11、SpringBoot测试 SpringBoot提供测试支持,可以通过引入test依赖,并使用SpringBoot的测试注解...
这个名为"springboot-hibernate-strruts2_springboot_struts2_hibernate_整合_源码"的压缩包文件,显然包含了将Spring Boot与Struts2和Hibernate整合的示例代码或项目模板。下面我们将详细讨论如何进行这种整合以及...
对于异常处理,SpringBoot提供了@ControllerAdvice和@ExceptionHandler注解,可以全局统一处理异常。日志方面,SpringBoot默认集成了Logback或Log4j,可以方便地进行日志输出和管理。 此外,为了提高系统的可测试性...
SpringBoot提供了@ControllerAdvice和@ExceptionHandler注解,方便全局处理异常。 10. 性能优化: 为了提升系统性能,可以考虑使用缓存技术如Redis,将常用数据存储在内存中,减少数据库访问。此外,通过...
7. **异常处理**:学习如何配置全局异常处理,提供友好的错误提示。 8. **日志记录**:了解如何使用Logback或Log4j进行日志记录,以便调试和问题排查。 9. **单元测试**:观察JUnit和Mockito等工具如何用于编写测试...
7. **异常处理**:在SpringBoot中,可以通过@ControllerAdvice和@ExceptionHandler注解实现全局的异常处理,统一返回友好的错误信息,提高用户体验。 8. **日志管理**:系统采用Logback或Log4j等日志框架,记录系统...
5. **异常处理**:通过SpringBoot提供的全局异常处理器对运行时可能出现的异常进行统一处理。 6. **日志记录**:利用SpringBoot集成的日志框架记录系统运行时的日志信息,便于后续的问题排查。 7. **测试**:进行...
8. **异常处理与日志记录**:使用Spring Boot的全局异常处理和日志框架(如Logback或Log4j),记录系统运行中的异常信息和操作日志,便于问题排查和系统优化。 这个项目对于学习SpringBoot和Vue的开发者来说,是一...
在本篇内容中,我们将探讨如何将Apache Dubbo与Spring Boot进行整合,创建一个服务提供者(Provider)和一个服务消费者(Consumer)。首先,我们来理解一下这两个关键组件的定义:服务提供者是指实现了特定接口并...
1. 数据存储:SpringBoot整合了JPA(Java Persistence API)和MyBatis,可以方便地操作数据库,进行数据的增删改查。 2. RESTful API:通过Spring Boot的@RestController注解,构建RESTful接口,与前端进行交互。 3....
综上,本项目展示了SpringBoot与Vue.js的深度整合,实现了宾馆客房预定管理系统的功能,同时也展现了现代Web应用开发的主流模式。通过学习这个项目,开发者可以深入理解前后端分离架构的设计思想,提升自己的技能...
总之,通过SpringBoot整合Mybatis并采用注解的方式,我们可以抛弃XML配置文件,实现更加简洁和高效的开发模式。同时,利用Mybatis的映射注解,可以轻松处理对象属性与数据库字段的映射问题,使代码更加整洁,降低...
6. **异常处理**:后台代码通常包含全局的异常处理机制,比如使用@ControllerAdvice和@ExceptionHandler注解,确保在遇到异常时能够优雅地返回错误信息,而不是直接抛出堆栈跟踪。 7. **日志记录**:SpringBoot内置...
《客户信息管理系统源码解析——基于Java Springboot+MySQL+Vue技术栈》 客户信息管理系统是一种常见的企业级应用,用于高效地存储、管理和分析客户数据,以提升服务质量、优化业务流程。本系统采用现代Web开发的...
这就引出了我们的主题——"springboot-txlcn.rar",它是一个整合了Spring Boot、Spring Cloud以及TX-LCN分布式事务框架的示例项目。 首先,让我们深入了解一下Spring Boot。Spring Boot是由Pivotal团队提供的全新...
《深入理解百度开源的分布式ID生成器UidGenerator》 在分布式系统中,生成全局唯一ID是一...将其整合到SpringBoot和MyBatis项目中,可以方便地为系统提供全局唯一的ID服务,为现代分布式系统的构建提供了有力的工具。