项目用到了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配置全局异常的更多相关文章

  1. SpringBoot(6) SpringBoot配置全局异常

    1.全局异常 @ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody //捕获全局异常,处理所有不可知的异常 ...

  2. 【spring】-- springboot配置全局异常处理器

    一.为什么要使用全局异常处理器? 什么是全局异常处理器? 就是把错误异常统一处理的方法. 应用场景: 1.当你使用jsr303参数校验器,如果参数校验不通过会抛异常,而且无法使用try-catch语句 ...

  3. (入门SpringBoot)SpringBoot配置全局异常(五)

    Spring的全局异常,用于捕获程序员没有捕获的异常.具体请看下面代码: 1.ControllerAdvice拦截异常,统一处理.通过Spring的AOP来管理. @ControllerAdvicep ...

  4. Spring Boot配置全局异常捕获

    1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...

  5. (办公)springboot配置表单验证@Valid

    项目用到了springboot,本来很高兴,但是项目里什么东西都没有,验证,全局异常这些都需要自己区配置.最近springboot用的还是蛮多的,我还是做事情,把经验发表一下. SpringBoot提 ...

  6. Springboot项目全局异常统一处理

    转自https://blog.csdn.net/hao_kkkkk/article/details/80538955 最近在做项目时需要对异常进行全局统一处理,主要是一些分类入库以及记录日志等,因为项 ...

  7. 4、springboot之全局异常捕获

    1.新建一个springboot项目 添加一个全局异常的类 import org.springframework.web.bind.annotation.ControllerAdvice; impor ...

  8. SpringBoot配置全局自定义异常

    不同于传统集中时Springmvc 全局异常,具体查看前面的章节https://www.cnblogs.com/zwdx/p/8963311.html 对于springboot框架来讲,这里我就介绍一 ...

  9. SpringBoot捕获全局异常

    1.创建GloableExceptionAop类捕获全局异常 package com.cppdy.exception; import org.springframework.web.bind.anno ...

随机推荐

  1. Struts2的拦截器配置

    1:引入默认的时间拦截器 <!-- 引入拦截器和引入拦截器栈一样的语法 --> <interceptor-ref name="defaultStack">& ...

  2. Java 泛型完全解读

    对于泛型的使用我想大家都非常熟悉,但是对于类型擦除,边界拓展等细节问题,可能不是很清楚,所以本文会重点讲解一下:另外对泛型的了解其实可以看出,一个语言特性的产生逻辑,这对我们平时的开发也是非常有帮助的 ...

  3. 如何购买并配置linux服务器上的数据库

    首先百度搜索阿里云 如果是学生可以学生认证 然后注册账号->个人认证->学生认证 然后你会发现 服务器一年只要114,114你买不了上当,买不了吃亏,买下面的ECS服务器,系统可以选择wi ...

  4. Linux 初始环境配置 以及避坑 (详细)

    没事儿喜欢自己装个虚拟机捣鼓捣鼓,经过几次装一些Linux 经验, 有时候  电脑了 .想重新系统了,又要重新去配置环境, 有时候又要去查很多很多命令 . 记录分享下Linux 下配置开发环境以及桌面 ...

  5. Win7系统修改hosts无法保存怎么办?

    背景 有的时候我们需要修改hosts文件,但是在某些情况下竟提示保存不了.之前有一次IntelliJ IDEA提示我快到期了,于是我到网上找到了一个激活方法,但需要将一个地址放到hosts文件中去,此 ...

  6. 如何用人工的方式将Excel里的一堆数字变成一个数组

    目的是抛砖引玉,有谁可以教教我如何吧Excle的数据导入MyEclipse么? 如果只有⑨个字符的话我肯定是直接人工输入的,然而这次有65536行乘以3组,遭不住啊. 一.数组之间要有逗号在B列右键, ...

  7. 再谈AbstractQueuedSynchronizer3:基于AbstractQueuedSynchronizer的并发类实现

    公平模式ReentrantLock实现原理 前面的文章研究了AbstractQueuedSynchronizer的独占锁和共享锁,有了前两篇文章的基础,就可以乘胜追击,看一下基于AbstractQue ...

  8. asp.net core导入excel

    接昨天的导出 导入excel内容 对比昨天导出的内容增加了一行实体属性名称作为标题行,这样到转换为实体的时候才能找到对应的属性. 导入代码 public IActionResult InportExc ...

  9. Python-网络爬虫模块-requests模块之请求

    Python原生库urllib库不太方便使用,本着"人生苦短, 我用Python"的珍惜生命精神, 基于urllib, 开发了一个对人类来说, 更好使用的一个库——requests ...

  10. [Vue] karme/jasmine/webpack/vue搭建测试环境

    karma 和 jasmine karma 是 google 开源的一个基于 Node.js 的 JavaScript 前端测试运行框架,前身叫 Testacular. jasmine 是一个 jav ...