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 ...
随机推荐
- 写给Web开发人员看的Nginx介绍
译者注:不知道其他开发者是否和我一样,参与或者写了很多Web项目,但是却没有真正的去完整的部署应用,很多时候都是交给ops即运维的同学帮忙来做.而作为一个有节操的开发者,我认为了解一些服务器方面的知识 ...
- JSP开发 路径问题汇总
//第一种 jsp 表达式 <%=request.getContextPath %> 获取到 web项目名的绝对路径 <!--使用绝对路径的方式引入CSS文件--> <l ...
- 1249: 人见人爱A^B
题目描述 求A^B的最后三位数表示的整数. 说明:A^B的含义是“A的B次方” 输入 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果 ...
- exp/imp 数据库数据导出/导入
一.exp数据导出 1.导出全部数据 exp 用户名/密码@服务名 file=文件存储路径/xxx.dmp log=日志存储路径/xxx.log full=y 例: [oracle@dbservice ...
- python实践总结与反思
2019.6.20 python近期实践总结与反思 记录一些这两天python犯的一些低级却易犯的错误.千万不要犯第二次啊!! 1. py文件名字问题 py文件命名不能和调用的模块名一样! 比如,我要 ...
- Web Api 创建及其使用
由于创建博客,我需要尝试一些新的技术,新的思路,所以我没规规矩矩的写博客,用上了诸多以前没用的东西,比如现在这个(我只是听过web api 我连 web server 都只是用过两三次/手动滑稽) 昨 ...
- 一个页面,WEB全功能
当鼠标在页面上往下滑动的时候,页面也一直向下,标签也顺带着全部向下滑动 以前浏览页面,主要是在PC上进行浏览,一个页面不适于太长,需要用户向下拖动: 当时的设计是,点击标签,点击不同的标签,跳转到不同 ...
- 个人作业-Alpha项目测试—luomei1547
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnbl ...
- openpose-opencv 的coco数据多人体姿态估计
介绍 opencv除了支持常用的物体检测模型和分类模型之外,还支持openpose模型,同样是线下训练和线上调用.这里不做特别多的介绍,先把源代码和数据放出来- 实验模型获取地址:https://gi ...
- 按下开机键,Linux做了什么?
作者:Vamei 来源:见文末 计算机开机是一个神秘的过程.我们只是按了开机键,就看到屏幕上的进度条或者一行行的输出,直到我们到达登录界面.然而,计算机开机又是个异常脆弱的过程,我们满心期望的登录界面 ...