(办公)springboot配置全局异常
项目用到了springboot,本来很高兴,但是项目里什么东西都没有,验证,全局异常这些都需要自己区配置。最近springboot用的还是蛮多的,我还是做事情,把经验发表一下.全局统一的异常,首先异常的返回值和正常返回的返回值应该统一json.返回值的code和msg可以用enum保存起来,controller层的方法抛出异常.下面看代码.
package com.lianrong.system.controller; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus; import com.lianrong.system.constants.MessageConstant;
import com.lianrong.system.base.SimpleServiceResult;
import com.lianrong.system.exception.ServiceException; @ControllerAdvice
public class AdviceController {
private static final Logger logger = LoggerFactory.getLogger(AdviceController.class); @ExceptionHandler(ServiceException.class)
@ResponseBody
public SimpleServiceResult handlerException(ServiceException e) {
logger.warn("预知异常", e);
//SimpleServiceResult jsonResult = new SimpleServiceResult();
//jsonResult.setStatus(false);
//jsonResult.addMsg(MessageConstant.E0000_9999, e.getMessage());
return SimpleServiceResult.error500(e.getMessage());
} @ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
@ResponseStatus(value= HttpStatus.BAD_REQUEST)
public SimpleServiceResult handlerException(HttpMessageNotReadableException e) {
logger.error("服务器未能理解请求!", e);
//SimpleServiceResult jsonResult = new SimpleServiceResult();
//jsonResult.setStatus(false);
//jsonResult.addMsg(MessageConstant.E0000_0502, "服务器未能理解请求!");
return SimpleServiceResult.error500("服务器未能理解请求!");
} @ExceptionHandler(Exception.class)
@ResponseBody
public SimpleServiceResult handlerException(Exception e) {
logger.error("运行时异常", e);
//SimpleServiceResult jsonResult = new SimpleServiceResult();
//jsonResult.setStatus(false);
//jsonResult.addMsg(MessageConstant.E0000_9999, "运行时异常");
return SimpleServiceResult.error500("运行时异常");
}
}
package com.lianrong.system.exception; public class ServiceException extends RuntimeException { private static final long serialVersionUID = 1L; public ServiceException(String message) {
super(message);
}
}
package com.imooc.shoptest001.handle; import com.imooc.shoptest001.utils.JsonData;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; /**
* 全局异常捕获
*/
@ControllerAdvice
public class ExceptionHandle { /**
* ExceptionHandler 捕获什么异常
* ResponseBody 返回json格式
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public JsonData handle(Exception ex){
ex.printStackTrace();
System.out.println(ex.toString());
return JsonData.error500(ex.getMessage());
}
}
package com.imooc.shoptest001.utils; public enum JsonDataEnum {
ERROR(-,"失败"),
SUCCESS(,"成功"),
;
private Integer code; private String msg; JsonDataEnum(Integer code,String msg){
this.code = code;
this.msg = msg;
} public Integer getCode() {
return code;
} public String getMsg() {
return msg;
}
}
package com.imooc.shoptest001.utils; /**
* 前台返回json类
*/
public class JsonData<T> {
/**
* 返回状态
*/
private boolean status;
/**
* 错误码/正确码
*/
private Integer code;
/**
* 消息.
*/
private String msg;
/**
* 具体的内容.
*/
private T data; public static JsonData success(String msg,Object data){
JsonData jsonData = new JsonData();
jsonData.setMsg(msg);
jsonData.setStatus(true);
jsonData.setCode();
jsonData.setData(data);
return jsonData;
} public static JsonData ok(){
JsonData jsonData = new JsonData();
jsonData.setStatus(true);
jsonData.setCode();
return jsonData;
} public static JsonData error(Integer code,String msg){
JsonData jsonData = new JsonData();
jsonData.setStatus(false);
jsonData.setCode(code);
jsonData.setMsg(msg);
return jsonData;
} public static JsonData error500(String msg){
JsonData jsonData = new JsonData();
jsonData.setStatus(false);
jsonData.setCode();
jsonData.setMsg(msg);
return jsonData;
} public boolean isStatus() {
return status;
} public void setStatus(boolean status) {
this.status = status;
} public Integer getCode() {
return code;
} public void setCode(Integer 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;
}
}
另外自己写了一个jsonData返回类
package com.lianrong.system.base; import java.io.Serializable;
import java.util.HashMap;
import java.util.Map; /**
* 返回json的工具类.
*/
public class JsonData implements Serializable { private static final long serialVersionUID = -1140504575505840707L;
/**
* 请求结果正不正常.
*/
private boolean status;
/**
* 消息.
*/
private String msg;
/**
* 返回码
*/
private int code;
/**
* 数据:
*/
private Object data; public JsonData(boolean status){
this.status = status;
} public JsonData(boolean status,int code){
this.status = status;
} public static JsonData success(Object object,String msg){
JsonData jsondata = new JsonData(true);
jsondata.data = object;
jsondata.code = ;
jsondata.msg = msg;
return jsondata;
} public static JsonData success(Object object){
JsonData jsondata = new JsonData(true);
jsondata.data = object;
jsondata.code = ;
return jsondata;
} public static JsonData success(){
return new JsonData(true,);
} public static JsonData error(String msg){
JsonData jsondata = new JsonData(false);
jsondata.msg = msg;
return jsondata;
} public static JsonData error500(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",请求未完成。服务器遇到不可预知的情况。";
return jsondata;
} public static JsonData error501(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",请求未完成。服务器不支持所请求的功能。";
return jsondata;
} public static JsonData error502(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",请求未完成。服务器从上游服务器收到一个无效的响应。";
return jsondata;
} public static JsonData error503(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",请求未完成。服务器临时过载或当机。";
return jsondata;
} public static JsonData error504(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",网关超时。";
return jsondata;
} public static JsonData error401(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",被请求的页面需要用户名和密码。";
return jsondata;
} public static JsonData error402(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",此代码尚无法使用。";
return jsondata;
} public static JsonData error403(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",对被请求页面的访问被禁止。";
return jsondata;
} public static JsonData error404(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",服务器无法找到被请求的页面。";
return jsondata;
} public static JsonData error406(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",服务器生成的响应无法被客户端所接受。";
return jsondata;
} public static JsonData error505(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",服务器不支持请求中指明的HTTP协议版本。";
return jsondata;
} public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public Object getData() {
return data;
} public void setData(Object data) {
this.data = data;
} public boolean isStatus() {
return status;
} public void setStatus(boolean status) {
this.status = status;
} public int getCode() {
return code;
} public void setCode(int code) {
this.code = code;
} public Map<String,Object> toMap(){
HashMap<String,Object> result = new HashMap<String,Object>();
result.put("status",status);
result.put("msg",msg);
result.put("code",code);
result.put("data",data);
return result;
} }
(办公)springboot配置全局异常的更多相关文章
- SpringBoot(6) SpringBoot配置全局异常
1.全局异常 @ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody //捕获全局异常,处理所有不可知的异常 ...
- 【spring】-- springboot配置全局异常处理器
一.为什么要使用全局异常处理器? 什么是全局异常处理器? 就是把错误异常统一处理的方法. 应用场景: 1.当你使用jsr303参数校验器,如果参数校验不通过会抛异常,而且无法使用try-catch语句 ...
- (入门SpringBoot)SpringBoot配置全局异常(五)
Spring的全局异常,用于捕获程序员没有捕获的异常.具体请看下面代码: 1.ControllerAdvice拦截异常,统一处理.通过Spring的AOP来管理. @ControllerAdvicep ...
- Spring Boot配置全局异常捕获
1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...
- (办公)springboot配置表单验证@Valid
项目用到了springboot,本来很高兴,但是项目里什么东西都没有,验证,全局异常这些都需要自己区配置.最近springboot用的还是蛮多的,我还是做事情,把经验发表一下. SpringBoot提 ...
- Springboot项目全局异常统一处理
转自https://blog.csdn.net/hao_kkkkk/article/details/80538955 最近在做项目时需要对异常进行全局统一处理,主要是一些分类入库以及记录日志等,因为项 ...
- 4、springboot之全局异常捕获
1.新建一个springboot项目 添加一个全局异常的类 import org.springframework.web.bind.annotation.ControllerAdvice; impor ...
- SpringBoot配置全局自定义异常
不同于传统集中时Springmvc 全局异常,具体查看前面的章节https://www.cnblogs.com/zwdx/p/8963311.html 对于springboot框架来讲,这里我就介绍一 ...
- SpringBoot捕获全局异常
1.创建GloableExceptionAop类捕获全局异常 package com.cppdy.exception; import org.springframework.web.bind.anno ...
随机推荐
- SpringBoot | 第六章:常用注解介绍及简单使用
前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志配置等.这章节开始,开始总结一些关于springboot的综合开发的知识点.由于SpringBoot本身是基于Sprin ...
- 结合JDK源码看设计模式——装饰者模式
定义 在不改变原有对象的基础之上,将功能附加到对象上 适用场景 扩展一个类的功能 动态的给对象增加功能,当功能不需要的时候能够动态删除 详解 在看到定义的时候,可能很多人会想,这不就是继承吗?的确很像 ...
- Cookie、LocalStorage 与 SessionStorage的区别在哪里?
基本概念 Cookie Cookie 是小甜饼的意思.顾名思义,cookie 确实非常小,它的大小限制为4KB左右.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码”,这通常就是通 ...
- django中出现 错误 Errno 10053
django中出现 错误 Errno 10053 pycharm里出现下面错误File "C:\Python27\lib\socket.py", line 307, in flus ...
- linux 进程概念
1,pcb:进程控制块结构体:/usr/src/linux-headers-4.15.0-29/include/linux/sched.h 进程id:系统中每个进程有唯一的id,在c语言中用pid_t ...
- Active Directory 域服务安装与测试
Active Directory 域服务安装与测试 实验原理: 安装域服务并创建用户,把另一个电脑加入域中,然后用域账户登录以及用本地账户登录测试 实验条件:windows server 2008(域 ...
- css块级元素和行内元素详细解析
块级元素和行内元素是布局中常见的两种基本元素,但是未必有很多人深入的研究它们的细微差别. 常见块级元素:div p form ul ol li 等: 常见的行内元素:span stronh em; ...
- .NET微服务调查结果
.NET Core就是专门针对模块化的微服务架构而设计, 在2018年国庆时间展开.NET微服务的使用情况,本次调查我们总计收到了来自378个开发者的调查.从落地现状.架构体系.未来趋势等方面对微服务 ...
- 你所不知道的 CSS 阴影技巧与细节
关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow 的用法. 最近一个新的项目,CSS-Ins ...
- Linux2:Linux目录结构
Linux目录图 进入根目录,使用ll命令看一下Linux整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Linux以树的结构组织所有目录,用一张图表示一下Linux ...