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 ...
随机推荐
- 调用顺丰API实现电商专递下单和获取面单功能
参考文章:https://www.cnblogs.com/zhangxiaoyong/p/8317229.html 顺丰需求文档: 链接:https://pan.baidu.com/s/16EEaph ...
- adminMongo:mongoDB node GUI(mongoDB图形化界面)
adminMongo:mongoDB node GUI(mongoDB图形化界面) 获取项目项目 克隆:git clone https://github.com/mrvautin/adminMongo ...
- 案例-使用MapReduce实现join操作
哈喽-各位小伙伴们中秋快乐,好久没更新新的文章啦,今天分享如何使用mapreduce进行join操作. 在离线计算中,我们常常不只是会对单一一个文件进行操作,进行需要进行两个或多个文件关联出更多数据, ...
- JavaScript-- 基础知识面试题
1.JavaScript语言特点 1.弱类型,数据类型由数据的值决定 2.解释性脚本语言--解释器是JS引擎 是浏览器的一部分 3.运行在客户端浏览器上 4.有事件驱动机制(按下鼠标,移动窗口等) 5 ...
- perl判断文件是否存在 perl -e
perl 有很多的命令 其中有 -e 是判断文件和目录是否存在 代码如下: #!/usr/bin/perl $fileExist = -e "/var/log/messages&qu ...
- Hadoop错误:PipeMapRed.waitOutputThreads(): subprocess failed with code 1
有一种原因是python文件中有语法或逻辑错误
- 微软Surface低端版本将问世
平板电脑现如今已走进千家万户,其触屏的操作相比笔记本电脑更加方便,屏幕也比手机大很多,是家用玩机的首选.虽然微软也在这一领域有所发力,推出了Surface这一产品,但其高昂的售价使得其在市场上的表现并 ...
- Linux学习之六-Linux系统的基础优化
Linux系统的基础优化 何谓'优化'.顾名思义,优化就是采取某些措施使某个东西或者某事物变得更加优异,出色.对于Linux而言,在初期安装好系统之后,也需要对其进行一定的基础优化,可分为安全上的优化 ...
- Array 和 ArrayList 有何区别?(未完成)
Array 和 ArrayList 有何区别?(未完成)
- CallContext线程数据缓存-调用上下文
一.CallContext 概述 命名空间:System.Runtime.Remoting.Messaging CallContext 用于提供与执行代码路径一起传送的属性集,直白讲就是:提供线程(多 ...