项目用到了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. 卷积神经网络之LeNet

    开局一张图,内容全靠编. 上图引用自 [卷积神经网络-进化史]从LeNet到AlexNet. 目前常用的卷积神经网络 深度学习现在是百花齐放,各种网络结构层出不穷,计划梳理下各个常用的卷积神经网络结构 ...

  2. .netcore2.1 使用postgresql数据库,不能实现表的CRUD问题

    PostgreSQL对表名.字段名都是区分大小写的.为了兼容其他的数据库程序代码的编写,推荐使用小写加_的方式,例如:swagger_info 我们使用.netcore连接postgresql数据库时 ...

  3. Android-原笔迹手写的探索与开发

     前言 这篇文章主要是关于移动端原笔迹的开发,让平板上的手写效果达到笔迹光滑且有笔锋. 介绍关于原笔迹的算法思路. 项目github地址 算法思路分析 曲线拟合算法 利用曲线拟合算法增加虚拟的点,使得 ...

  4. Flutter 异常处理之图片篇

    背景 说到异常处理,你可能直接会认为不就是 try-catch 的事情,至于写一篇文章单独来说明吗? 如果你是这么想的,那么本篇说不定会给你惊喜哦~ 而且本篇聚焦在图片的异常处理. 场景 学以致用,有 ...

  5. 20190429 - 如何访问 macOS 的 httpd、mysql 等服务

    问题:在局域网,通过其它机器访问 macOS 上的服务时,提示拒绝. 解决:将 macOS 防火墙 80.3306 端口打开. macOS 内置防火墙,也许开启了防火墙.Icefloor 是一个老牌的 ...

  6. 为什么腾讯有QQ,还要推出微信?

    在微信刚出现时候,很多人奇怪,为什么腾讯有QQ,还要推出微信? 一开始,我也认为它与QQ没有什么区别.有这种看法,是因为绝大多数时候,我都仅仅只使用即时聊天功能,微信上有的语音.视频.文字等等,这些在 ...

  7. 我为什么推荐你使用kindle

    我为什么推荐你使用kindle kindle 分 kindle 电子阅读器,pc 版,app 版,下文主要介绍 Amazon 设计和销售的电子书阅读器. 亚马逊官方出的 kindle 使用技巧 使用 ...

  8. MonacoEditor 主动触发代码提示功能

    MonacoEditor是微软提供的代码编辑器 vscode即是使用它作为编辑器. 它的开发语言是ts,可以嵌入到浏览器中. 代码提示或者说代码补全功能是我们经常需要定制的部分. 目前它提供的快捷键是 ...

  9. Markdown 插入图片技巧

    在使用Markdown编写博客或文件的时候,经常会需要插入图片.如果使用Markdown语法,我们会发现调整图片的大小会是个问题. 所以推荐使用另一种办法插入图片,使用HTML语法,示例如下: < ...

  10. 爬虫框架之Scrapy(三 CrawlSpider)

    如何爬取一个网站的全站数据? 可以使用Scrapy中基于Spider的递归方式进行爬取(Request模块回调parse方法) 还有一种更高效的方法,就是基于CrawlSpider的自动爬取实现 简介 ...