一、异常处理思路

  异常捕获的是unchecked型异常,因为checked异常在代码中年已经处理过,当然是在使用try-catch处理。这里首先使用ExceptionHandler捕获全局异常,这样如果是程序中有运行时异常就可以被随时捕获到,并将必要信息返回给调用者。对于使用try-catch捕获的异常,先创建自定义的运行时异常类,然后手动抛出。另外,在service使用unchecked异常可以触发事务回滚。

二、try-catch手动抛出异常代码演示

spingboot全局异常创建:

package com.dbzx.exception;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; import com.dbzx.common.ResultModel; /**
* 拦截异常后返回json信息,如果需要返回html页面,需要通过ModelAndView返回
* @author
*
*/
@RestControllerAdvice
public class JsonResultExceptionHandler { @ExceptionHandler(value = Exception.class)
public ResultModel defaultErrorHandler(HttpServletRequest req,
Exception e) throws Exception { e.printStackTrace();
return ResultModel.errorException("异常信息:"+e.getMessage());
}
}

自定义异常类:

package com.dbzx.exception;

public class CustomUncheckException extends RuntimeException{

    /**
*
*/
private static final long serialVersionUID = 1L; public CustomUncheckException() {
super();
} public CustomUncheckException(String msg) {
super(msg);
} public CustomUncheckException(String msg,Throwable cause) {
super(msg,cause);
} }

调用代码:

package com.dbzx.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.dbzx.common.ResultModel;
import com.dbzx.exception.CustomUncheckException;
import com.dbzx.service.UserService; @RestController
@RequestMapping("dbzx")
public class HelloController { @Autowired
UserService userService; @RequestMapping("/hello")
public ResultModel hello() { try {
int i = 1 / 0;
} catch (Exception e) {
throw new CustomUncheckException(e.getMessage());
}
return ResultModel.ok("hello");
}
}

调用结果:

{
"status": 555,
"msg": "异常信息:/ by zero",
"data": null
}

最新文章

  1. web前端浮动、清浮动问题
  2. java 使用递归获取指定文件路径目录,删除指定的文件后缀(可扩展,根据具体需要的删除的后缀进行配置)~~
  3. cocoapod-使用cocoapod安装AFNetworking3.0
  4. JAVA StringBuilder StringBuffer String比较
  5. php用于URL的base64
  6. ubuntu系统安装redis
  7. UVA_埃及分数(Hard Version) UVA 12588
  8. DIV层漂浮居中
  9. Python之函数知识
  10. Asp.net mvc 小试牛刀一:多语言支持
  11. 强制解包看 Swift 的设计
  12. C#语言入门详解(002)
  13. 深度学习-conv卷积
  14. Windows Server 2008取消登录前的Ctrl+Alt+Delete组合键操作
  15. python第二章:数据类型--小白博客
  16. word常用功能
  17. Spring Boot + Spring Cloud 构建微服务系统(七):API服务网关(Zuul)
  18. 基于uFUN开发板的RGB调色板
  19. Oracle 项目中 SQL 脚本更新方式
  20. 我对Web开发的认识

热门文章

  1. Layui 模板引擎中的 日期格式化
  2. 基于zookeeper-3.5.5安装hadoop-3.1.2
  3. Flask视图之CBV示列
  4. 两次bfs求树的直径的正确性
  5. 填坑 bzoj3337
  6. SpringBoot与MyBatis整合案例
  7. C/C++中书写汇编指令
  8. docker:轻量级图形页面管理工具Portainer
  9. .NET技术webconfig加密操作
  10. C++ getline()的两种用法