springboot中web应用的统一异常处理
在web应用中,请求处理过程中发生异常是非常常见的情况。springboot为我们提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容。为了测试,我们通过IDEA的Spring Initializr来快速创建一个SpringBoot的web项目,创建过程省略。
创建完成之后,启动这个项目,访问一个不存在的URL,页面会显示一下内容

该页面就是Spring Boot提供的默认error映射页面。
1、统一异常处理
虽然,Spring Boot中实现了默认的error映射,但是在实际应用中,我们通常需要去实现我们自己的异常提示。例如,当我们要实现RESTful API时,返回的错误是JSON格式的数据。我们一起来实现一下。
新建CodeMsg类
public class CodeMsg {
private int code;//错误码
private String msg;//错误信息
private CodeMsg(int code, String msg) {
this.code = code;
this.msg = msg;
}
/** 系统模块 */
public static CodeMsg SERVER_ERROR = new CodeMsg(500100,"服务端异常");
public static CodeMsg NULL_POINT_EXCEPTION = new CodeMsg(500200,"空指针异常");
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
新建Result类
Result类是用来统一管理返回数据的类
public class Result<T> {
private int code;//错误码
private String msg;//提示信息
private T data;//返回的数据
private Result(T data){
this.code = 200;
this.msg = "success";
this.data = data;
}
private Result(CodeMsg codeMsg){
if (codeMsg == null){
return;
}
this.code = codeMsg.getCode();
this.msg = codeMsg.getMsg();
}
/**
* 成功的时候调用,接口返回数据
*/
public static <T> Result<T> success(T data){
return new Result<T>(data);
}
/**
* 失败的时候调用,返回错误信息
*/
public static <T> Result<T> error(CodeMsg codeMsg){
return new Result<T>(codeMsg);
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
新建ZhuangException类
public class ZhuangException extends RuntimeException{
private CodeMsg codeMsg;
public ZhuangException(CodeMsg codeMsg){
super(codeMsg.toString());
this.codeMsg = codeMsg;
}
public CodeMsg getCodeMsg() {
return codeMsg;
}
}
新建GlobalExceptionHandler类
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = ZhuangException.class)
@ResponseBody
public Result<Object> exceptionHandler(HttpServletRequest request, ZhuangException ex){
return Result.error(ex.getCodeMsg());
}
}
新建UserController测试
@Controller
public class UserController {
@RequestMapping("/test")
@ResponseBody
public Result<List<String>> test(){
try {
//测试空指针异常
String a = null;
a.length();
List<String> list = new ArrayList<String>();
list.add("测试数据");
return Result.success(list);
}catch (Exception e){
throw new ZhuangException(CodeMsg.NULL_POINT_EXCEPTION);
}
}
}
启动工程,访问http://localhost:8080/test,页面上显示的信息为
{"code":500200,"msg":"空指针异常","data":null}
这样的提示信息简洁明了,看着舒服。
至此,已完成在Spring Boot中创建统一的异常处理,实际实现还是依靠Spring MVC的注解,更多更深入的使用可参考Spring MVC的文档。
参考:http://blog.didispace.com/springbootexception/
springboot中web应用的统一异常处理的更多相关文章
- Spring Boot中Web应用的统一异常处理
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...
- [转] Spring Boot中Web应用的统一异常处理
[From] http://blog.didispace.com/springbootexception/ 我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供 ...
- Spring Boot中Web应用的统一异常处理 转载来自翟永超
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...
- Web应用的统一异常处理(二十四)
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...
- SpringBoot(十九)_404返回统一异常处理结果
之前写过一篇统一异常处理的文章,今天测试了下如果访问一个不存在的接口,也想返回统一的错误信息,应该怎么做 1.修改application.properties文件 # 自定义404 #出现错误时, 直 ...
- Spring Boot教程(二十四)Web应用的统一异常处理
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...
- springboot中 简单的SpringMvc全局异常处理
1.全局异常处理类:GlobalExceptionHandler.java package com.lf.exception; import java.util.HashMap; import jav ...
- asp.net web api添加统一异常处理
1.自定义异常处理过滤器 /// <summary> /// 自定义异常处理过滤器 /// </summary> public class CustomExceptionFil ...
- 在依赖的框架中已经有统一异常处理的情况下,如何定制自己的统一异常处理spring boot版本
spring boot 环境下的统一异常处理大家已经非常熟悉了,不熟悉的化可以参考 <<Spring Boot中Web应用的统一异常处理>>.公司内部的统一异常处理如下: @E ...
随机推荐
- .net core partial view的一些心得
原文:.net core partial view的一些心得 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...
- Tomcat server.xml port server context 配置
- Linux Jetbrains Datagrip 图标找不到
问题 系统版本:Ubuntu 18.04,Datagrip版本:2019.2 从官网下载的 tar.gz 解压之后,找到 datagrip.sh 就可以使用了.但是有个问题,它没有自动创建快捷方式,所 ...
- Lua table直接索引VS缓存索引性能测试小示例
local p = {} p.t = {} p.t.p = {} p.t.p.t = {} p.t.p.t.p = {} p.t.p.t.p.t = {} p.t.p.t.p.t.p = {} p.t ...
- Python TCP通信之仿文件下载
TCP_文件下载_Client.py import socket def main(): # 创建TCP套接字 tcp_socket = socket.socket(socket.AF_INET, s ...
- 一个SAP开发人员的养蚕流水帐
Jerry打算以此文来给汪子熙全家进行了一个多月的养蚕经历画上一个圆满的句号. 南方长大的80后,对蚕应该不会太陌生.大家还记得你们小时候学过的课文<蚕姑娘>么?课文开头是这样的: 春天天 ...
- vue中用div的contenteditable属性实现v-for遍历,双向数据绑定的动态表格编辑
1.HTML部分 <tr v-for="(item,index) in customerVisitList2" :key="index"> < ...
- tornado 常见问题处理
1 怎么获取从页面中的传值 使用 self.get_body_argument tornado的参数存储在self.request.body内,通过json以后就可以直接取值,当初我在前端使用angu ...
- COM_STMT_PREPARE 1
mysqld_stmt_prepare void mysqld_stmt_prepare(THD* thd, const char * query, uint length, Prepared_sta ...
- DoD与TCP/IP
DoD与TCP/IP都是协议栈. 什么是协议栈? 就是一套软件,默认安装完Windows就有,可以卸载再安装.把他卸载了,你就不能上网. 数据的封装以及解封装有网卡以及绑定的TCP/IP协议栈完成 A ...