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,运行项目,简单的springboot,利用包装器实现全局的错误异常吗和错误错误信息的自定义
springboot全局异常处理,单独封装,代码简单,容易上手。
springboot 整合 Mybatis freemarker 全局异常抓取 静态页面
springboot后端全局异常处理及quartz整合源码,适合springboot初学者学习参考,希望可以帮到你!
springboot全局捕获异常springboot全局捕获异常springboot全局捕获异常
Spring Cloud Gateway的全局异常处理 Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理,通过跟踪异常信息的抛出,找到对应的源码,自定义一些处理逻辑来符合业务的需求。 网关都是给接口做...
springboot定义统一返回格式及全局异常处理。springboot定义统一返回格式及全局异常处理。
springboot 全局异常处理.捕捉全局异常,转换格式,以友好方式提示客户正确的操作步骤. 避免系统错误出现在用户勉强,造成不良使用体验.
springboot入门 全局 异常拦截 学习代码
SpringBoot中定义全局异常处理器示例代码SpringBoot中定义全局异常处理器示例代码
springBoot 全局的异常处理;springboot常用的属性配置;Spring Boot 使用thymeleaf;Spring Boot 使用freemarker
Springboot全局异常处理、JSR303参数校验,具体详见: https://blog.csdn.net/herojuice/article/details/85788681
主要为大家详细介绍了springboot springmvc抛出全局异常的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了Springboot之自定义全局异常处理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
android 全局异常处理 继承java.lang中的UncaughtExceptionHandler 的构造方法uncaughtException 来捕获异常
一、前言 我们开发的Web系统都会有日志模块,用来记录对数据有进行变更的操作。一般都会记录请求的URL,请求的IP,执行的方法,操作人员等等。其目的可能是为了保留操作痕迹,防抵赖,或是记录系统运行情况,再有...
在这个过程中,Java使用了try-catch语句块来捕获和处理异常。通过在一个或多个catch语句块中处理所有可能抛出的异常,可以实现全局异常统一处理。 例如,在Spring框架中,使用@ControllerAdvice和@ExceptionHandler...
适用于Java分布式高并发的全局唯一ID生成器;结合Springboot和SpringCloud