博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot中web应用的统一异常处理
阅读量:6003 次
发布时间:2019-06-20

本文共 3278 字,大约阅读时间需要 10 分钟。

在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
{ 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
Result
success(T data){ return new Result
(data); } /** * 失败的时候调用,返回错误信息 */ public static
Result
error(CodeMsg codeMsg){ return new Result
(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类

@ControllerAdvicepublic class GlobalExceptionHandler {    @ExceptionHandler(value = ZhuangException.class)    @ResponseBody    public Result exceptionHandler(HttpServletRequest request, ZhuangException ex){        return Result.error(ex.getCodeMsg());    }}

新建UserController测试

@Controllerpublic class UserController {    @RequestMapping("/test")    @ResponseBody    public Result
> test(){ try { //测试空指针异常 String a = null; a.length(); List
list = new ArrayList
(); 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的文档。

参考:

 

转载于:https://www.cnblogs.com/beanbag/p/10655960.html

你可能感兴趣的文章
大道至简-第七、八章-心得体会
查看>>
jConsole,jvisualvm和jmap使用
查看>>
nginx 高并发配置参数(转载)
查看>>
vue-resourse将json数据输出实例
查看>>
PAT (Advanced Level) 1027. Colors in Mars (20)
查看>>
HDU 5798 Stabilization
查看>>
CodeForces 733C Epidemic in Monstropolis
查看>>
GTK+重拾--06 布局管理器学习
查看>>
nodePPT初认识启动与手机控制
查看>>
站点下的GridView的RowCommand事件的设置,与站点应用不一样
查看>>
初识springcloud
查看>>
session的存储方式和配置
查看>>
win 2008 安装 arcgis desktop 9.3.1 的问题
查看>>
POJ 1636 DFS+DP
查看>>
highcharts.js的时间轴折线图
查看>>
O(N)时间的排序
查看>>
Docker入门——image制作
查看>>
基于NIOS-II的示波器:PART4 系统调试&测试
查看>>
20145222黄亚奇《Java程序设计》第3周学习总结
查看>>
python学习------迭代器协议和生成器
查看>>