DefaultExceptionAdvice

使用ControllerAdvice使其生效

package com.xx.common.exception;import com.xx.common.core.domain.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;import java.nio.file.AccessDeniedException;
import java.sql.SQLException;/*** @author zihang on 2020/4/5 21:38*/
@Slf4j
@RestController
public class DefaultExceptionAdvice {/*** IllegalArgumentException异常处理返回json* 返回状态码:400*/@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler({IllegalArgumentException.class})public Result<Void> badRequestException(IllegalArgumentException e) {return defHandler("参数解析失败", e);}/*** AccessDeniedException异常处理返回json* 返回状态码:403*/@ResponseStatus(HttpStatus.FORBIDDEN)@ExceptionHandler({AccessDeniedException.class})public Result<Void> badMethodExpressException(AccessDeniedException e) {return defHandler("没有权限请求当前方法", e);}/*** 返回状态码:405*/@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)@ExceptionHandler({HttpRequestMethodNotSupportedException.class})public Result<Void> handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {return defHandler("不支持当前请求方法", e);}/*** 返回状态码:415*/@ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE)@ExceptionHandler({HttpMediaTypeNotSupportedException.class})public Result<Void> handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e) {return defHandler("不支持当前媒体类型", e);}/*** 返回状态码:500*/@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)@ExceptionHandler({SQLException.class})public Result<Void> handleSQLException(SQLException e) {return defHandler("服务运行SQLException异常", e);}/*** BusinessException 业务异常处理* 返回状态码:500*/@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)@ExceptionHandler(BusinessException.class)public Result<Void> handleException(BusinessException e) {return defHandler("业务异常", e);}/*** 所有异常统一处理* 返回状态码:500*/@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)@ExceptionHandler(Exception.class)public Result<Void> handleException(Exception e) {return defHandler("未知异常", e);}private Result<Void> defHandler(String msg, Exception e) {log.error(msg, e);return Result.failed(msg);}
}

返回的是json格式,注解ResponseStatus无效果

Result

package com.xx.common.core.domain;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;import java.io.Serializable;/*** @author zihang on 2020/4/5 20:01*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> implements Serializable {private Integer code;private String msg;private T data;public static <T> Result<T> ok(String msg) {return okWith(null, CodeEnum.SUCCESS.getCode(), msg);}public static <T> Result<T> ok(T model, String msg) {return okWith(model, CodeEnum.SUCCESS.getCode(), msg);}public static <T> Result<T> ok(T model) {return okWith(model, CodeEnum.SUCCESS.getCode(), "");}public static <T> Result<T> okWith(T data, Integer code, String msg) {return new Result<>(code, msg, data);}public static <T> Result<T> failed(String msg) {return failedWith(CodeEnum.ERROR.getCode(), msg, null);}public static <T> Result<T> failed(T model, String msg) {return failedWith(CodeEnum.ERROR.getCode(), msg, model);}public static <T> Result<T> failedWith(Integer code, String msg, T data) {return new Result<>(code, msg, data);}@Getterenum CodeEnum {SUCCESS(200),ERROR(-1);private Integer code;CodeEnum(Integer code) {this.code = code;}}
}

ExceptionAdvice相关推荐

  1. 异常统一处理[ExceptionAdvice](SpringMVC)

    ExceptionAdvice ExceptionAdvice可以批量为多个controller统一增加异常处理和InitBinder 在ExceptionAdvice中 通过@ExceptionHa ...

  2. 从MVC到前后端分离

    摘要:MVC模式早在上个世纪70年代就诞生了,直到今天它依然存在,可见生命力相当之强.MVC模式最早用于Smalltalk语言中,最后在其它许多开发语言中都得到了很好的应用,例如,Java中的Stru ...

  3. Spring Cloud的全局封装实践

    前言 跨应用的全局封装通过模仿java的异常抛出实现,通过各个服务使用相同的接口返回格式实现服务消息的传递,在规范化的同时快速定位真正出现问题的服务. 全局接口返回格式分为外部接口格式和内部接口格式, ...

  4. Spring 中的统一异常处理

    在具体的SSM项目开发中,由于Controller层为处于请求处理的最顶层,再往上就是框架代码的. 因此,肯定需要在Controller捕获所有异常,并且做适当处理,返回给前端一个友好的错误码. 不过 ...

  5. Spring3.2新注解@ControllerAdvice

    @ControllerAdvice,是spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强. 注解@ControllerAdvice的代码: @Target(ElementType.T ...

  6. SpringBoot 统一异常处理 ControllerAdvice

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80678034 本文出自[赵彦军的博客] 在用spring Boot做web后台时, ...

  7. shiro 字段不是username 和password_Shiro整合JWT

    Shiro提供了完整的企业级会话管理功能,不依赖于底层容器Tomcat等,即直接使用Shiro的会话管理可以直接替换如Web容器的会话管理. 会话 所谓会话,即用户访问应用时保持的连接关系,在多次交互 ...

  8. SSM整合之纯注解方式,注解实现事务,异常,与拦截器

    SSM整合之纯注解方式Spring,SpringMVC,Mybatis 使用纯注解的方式,整合ssm, sql语句与数据表 在上一篇SSM整合之XML方式中有, 创建maven项目(代码中注释为详细解 ...

  9. SSM整合之XML方式,与配置事务,拦截器,异常处理,PageHelper分页插件整合

    SSM整合之XML方式 将主流的三大框架整合一起使用 spring:将需要的bean交给IOC管理 SpringMVC:解决表现层 MyBatis:解决持久层 创建maven项目(配置文件与代码中注释 ...

最新文章

  1. AutoCAD.NET API 最新(2012)教程下载及在线视频教程DevTV 第8讲 用户界面
  2. Ubuntu14.04 工作区设置
  3. java nanos_java命名空间java.util.concurrent.locks接口condition的类成员方法: awaitnanos定义及介绍...
  4. c语言打印数组元素_C程序打印元素差为0或1的子集数
  5. 项目: NFS服务的搭建
  6. 异或加密的java算法_Java使用异或运算实现简单的加密解密算法实例代码
  7. 试题3 基础练习 数列排序
  8. 20多个Maven命令和选项(备忘单)
  9. Mac 版 Android Studio 汉化教程 及汉化包
  10. docker 容器启动顺序_Docker高手进阶 - Docker Compose到底是什么
  11. 大数据平台应用 17 个关键技术处理
  12. 【个人笔记】图解深度学习
  13. 浙江省二级计算机vfp,浙江省高校计算机等级考试大纲(二级——VisualFoxPro语言程序设计大纲)...
  14. matlab 输入数据类型,Matlab数据类型及基本输入输出
  15. 《计算机软件著作权》申请注意事项
  16. [转载]《澄明之境》:投资是一种信仰
  17. 【leetcode】开密码锁
  18. python绘制花朵图案_Python编写万花尺图案实例
  19. [转]Top Five Ways SpiderLabs Got Domain Admin on Your Internal Network
  20. Textpad的安装和配置

热门文章

  1. 养猫人士必备App——Catbook
  2. 海康威视摄像机的实时读取篇二(海康SDK开发环境配置)
  3. ios开发之View属性hidden, opaque, alpha, opacity的区别
  4. pybind11使用教程笔记__4.3_binding STL containers -- opaque types
  5. gen_server tasting 之超简单名称服务
  6. 考研捡.漏指南这几所985院校专业去年一志愿没招满
  7. 红米k40隐私空间进入方法
  8. 农场种树养成兑换商城小程序开发
  9. 如何恢复edge浏览器旧版
  10. 就业关键_个人职业规划(1)--个人职业规划的意义