spring 全局异常处理

本贴最后更新于 1955 天前,其中的信息可能已经渤澥桑田
`package` `cn.com.cs.core.exception;`

`import` `org.slf4j.Logger;`

`import` `org.slf4j.LoggerFactory;`

`import` `org.springframework.http.HttpStatus;`

`import` `org.springframework.http.converter.HttpMessageNotReadableException;`

`import` `org.springframework.validation.BindException;`

`import` `org.springframework.validation.BindingResult;`

`import` `org.springframework.validation.FieldError;`

`import` `org.springframework.web.HttpMediaTypeNotSupportedException;`

`import` `org.springframework.web.HttpRequestMethodNotSupportedException;`

`import` `org.springframework.web.bind.MethodArgumentNotValidException;`

`import` `org.springframework.web.bind.MissingServletRequestParameterException;`

`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` `org.springframework.web.servlet.NoHandlerFoundException;`

`import` `javax.validation.ConstraintViolation;`

`import` `javax.validation.ConstraintViolationException;`

`import` `javax.xml.bind.ValidationException;`

`import` `java.util.Set;`

`/**`

`* 异常处理类`

`*/`

`@ControllerAdvice`

`@ResponseBody`

`public` `class` `CommonExceptionAdvice {`

`private` `static` `Logger logger = LoggerFactory.getLogger(CommonExceptionAdvice.``class``);`

`/**`

`* 400 - Bad Request`

`*/`

`@ResponseStatus``(HttpStatus.BAD_REQUEST)`

`@ExceptionHandler``(MissingServletRequestParameterException.``class``)`

`public` `String handleMissingServletRequestParameterException(MissingServletRequestParameterException e) {`

`logger.error(``"缺少请求参数"``, e);`

`return` `"缺少请求参数"``;`

`}`

`/**`

`* 400 - Bad Request`

`*/`

`@ResponseStatus``(HttpStatus.BAD_REQUEST)`

`@ExceptionHandler``(HttpMessageNotReadableException.``class``)`

`public` `String handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {`

`logger.error(``"参数解析失败"``, e);`

`return` `"参数解析失败"``;`

`}`

`/**`

`* 400 - Bad Request`

`*/`

`@ResponseStatus``(HttpStatus.BAD_REQUEST)`

`@ExceptionHandler``(MethodArgumentNotValidException.``class``)`

`public` `String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {`

`logger.error(``"参数验证失败"``, e);`

`BindingResult result = e.getBindingResult();`

`FieldError error = result.getFieldError();`

`String field = error.getField();`

`String code = error.getDefaultMessage();`

`String message = String.format(``"%s:%s"``, field, code);`

`return` `"参数验证失败="``+message;`

`}`

`/**`

`* 400 - Bad Request`

`*/`

`@ResponseStatus``(HttpStatus.BAD_REQUEST)`

`@ExceptionHandler``(BindException.``class``)`

`public` `String handleBindException(BindException e) {`

`logger.error(``"参数绑定失败"``, e);`

`BindingResult result = e.getBindingResult();`

`FieldError error = result.getFieldError();`

`String field = error.getField();`

`String code = error.getDefaultMessage();`

`String message = String.format(``"%s:%s"``, field, code);`

`return` `"参数绑定失败="``+message;`

`}`

`/**`

`* 400 - Bad Request`

`*/`

`@ResponseStatus``(HttpStatus.BAD_REQUEST)`

`@ExceptionHandler``(ConstraintViolationException.``class``)`

`public` `String handleServiceException(ConstraintViolationException e) {`

`logger.error(``"参数验证失败"``, e);`

`Set> violations = e.getConstraintViolations();`

`ConstraintViolation violation = violations.iterator().next();`

`String message = violation.getMessage();`

`return` `"参数验证失败"` `+ message;`

`}`

`/**`

`* 400 - Bad Request`

`*/`

`@ResponseStatus``(HttpStatus.BAD_REQUEST)`

`@ExceptionHandler``(ValidationException.``class``)`

`public` `String handleValidationException(ValidationException e) {`

`logger.error(``"参数验证失败"``, e);`

`return` `"参数验证失败"``;`

`}`

`/**`

`* 404 - Not Found`

`*/`

`@ResponseStatus``(HttpStatus.NOT_FOUND)`

`@ExceptionHandler``(NoHandlerFoundException.``class``)`

`public` `String noHandlerFoundException(NoHandlerFoundException e) {`

`logger.error(``"Not Found"``, e);`

`return` `"Not Found="``+e;`

`}`

`/**`

`* 405 - Method Not Allowed`

`*/`

`@ResponseStatus``(HttpStatus.METHOD_NOT_ALLOWED)`

`@ExceptionHandler``(HttpRequestMethodNotSupportedException.``class``)`

`public` `String handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {`

`logger.error(``"不支持当前请求方法"``, e);`

`return` `"request_method_not_supported"``;`

`}`

`/**`

`* 415 - Unsupported Media Type`

`*/`

`@ResponseStatus``(HttpStatus.UNSUPPORTED_MEDIA_TYPE)`

`@ExceptionHandler``(HttpMediaTypeNotSupportedException.``class``)`

`public` `String handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e) {`

`logger.error(``"不支持当前媒体类型"``, e);`

`return` `"content_type_not_supported"``;`

`}`

`/**`

`* 业务层需要自己声明异常的情况`

`*/`

`@ResponseStatus``(HttpStatus.INTERNAL_SERVER_ERROR)`

`@ExceptionHandler``(ServiceException.``class``)`

`public` `String handleServiceException(ServiceException e) {`

`logger.error(``"业务逻辑异常"``, e);`

`return` `"业务逻辑异常:"` `+ e.getMessage();`

`}`

`/**`

`* 操作数据或库出现异常`

`*/`

`@ResponseStatus``(HttpStatus.INTERNAL_SERVER_ERROR)`

`@ExceptionHandler``(DataDoException.``class``)`

`public` `String handleException(DataDoException e) {`

`logger.error(``"操作数据库出现异常:"``, e);`

`return` `"操作数据库出现异常:字段重复、有外键关联等"``;`

`}`

`/**`

`* 500 - Internal Server Error`

`*/`

`/*  @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)`

`@ExceptionHandler(Exception.class)`

`public String handleException(Exception e) {`

`logger.error("通用异常", e);`

`return "500通用异常:" + e.getMessage();`

`}*/`

`/**`

`* 获取其它异常。包括500`

`* @param e`

`* @return`

`* @throws Exception`

`*/`

`@ExceptionHandler``(value = Exception.``class``)`

`public` `String defaultErrorHandler(Exception e){`

`logger.error(``"Exception"``, e);`

`return` `"其它异常:"` `+ e.getMessage();`

`}`
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 148 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 232 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 389 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    26 引用 • 221 回帖 • 157 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 686 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 465 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 11 关注
  • gRpc
    10 引用 • 8 回帖 • 54 关注
  • 安装

    你若安好,便是晴天。

    130 引用 • 1184 回帖 • 1 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    205 引用 • 357 回帖 • 1 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 497 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    711 引用 • 1173 回帖 • 162 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 24 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 37 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 41 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 20 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 33 关注
  • OnlyOffice
    4 引用 • 18 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 5 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 2 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖 • 5 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 1 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    215 引用 • 462 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8207 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 368 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖