热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot之自定义异常的两种方式yellowcong

Springboot异常的处理,可以通过一下几种方法,1、使用ControllerAdvice来进行统一异常处理,ExceptionHan

Springboot异常的处理,可以通过一下几种方法,1、使用@ControllerAdvice来进行统一异常处理,@ExceptionHandler(value = Exception.class)来指定捕获的异常 ;2、通过自定义BasicErrorController 错误处理,这个是处理是基于状态码的。


代码地址

https://gitee.com/yellowcong/springboot-demo/tree/master/springboot-json

目录结构

这里写图片描述

1、通过@ControllerAdvice

通过使用@ControllerAdvice来进行统一异常处理,@ExceptionHandler(value = Exception.class)来指定捕获的异常 ,这个异常的处理,是全局的,所有类似的异常,都会跑到这个地方处理

package com.yellowcong.exception;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 com.alibaba.fastjson.JSONObject;/*** 创建日期:2018年4月6日
* 代码创建:黄聪
* 功能描述:
*/

@ControllerAdvice
public class RestExceptionHandler {/*** 创建日期:2018年4月6日
* 代码创建:黄聪
* 功能描述:直接处理 HttpMessageNotReadableException 报错的信息
* @param ex* @return*/
@ExceptionHandler({HttpMessageNotReadableException.class})@ResponseBodypublic String requestNotReadable(HttpMessageNotReadableException ex){ex.printStackTrace();//json 数据读取失败JSONObject result = new JSONObject();result.put("code", 400);result.put("msg", "json data is error ");return result.toJSONString();}}

测试

当我们发送错误的json数据后,直接报错,而且这个错误并不是非常的友好,所以我们需要自定义异常来解决这个问题。
这里写图片描述

通过自定义错误后,解决的效果,返回的是自定义的错误消息,这种效果好多了。
这里写图片描述

2、自定义BasicErrorController 错误处理


2.1启动器添加EmbeddedServletContainerCustomizer

在启动器里面,添加EmbeddedServletContainerCustomizer,然后在里面注册处理相应状态码的界面

package com.yellowcong;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.servlet.ErrorPage;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;@SpringBootApplication
public class ConfigMain {public static void main(String[] args) {SpringApplication.run(ConfigMain.class, args);}/*** 创建日期:2018年4月6日
* 代码创建:黄聪
* 功能描述:错误的处理
* @return*/
@Beanpublic EmbeddedServletContainerCustomizer containerCustomizer(){return new EmbeddedServletContainerCustomizer(){@Overridepublic void customize(ConfigurableEmbeddedServletContainer container) {//404container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404"));//500错误container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500"));//400错误container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/error/json"));}};}}

2.2错误处理控制器

这个控制器,和普通的控制器类似,没有啥特别的,主要是用来处理状态吗对应的错误的视图,这个地方需要说明的一点,json的404错误和直接通过浏览器访问的404两个的效果是不一样的。

package com.yellowcong.error;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.alibaba.fastjson.JSONObject;/*** 创建日期:2018年4月6日
* 代码创建:黄聪
* 功能描述:
*/

@Controller
@RequestMapping(value = "/error")
public class ExceptionController {@RequestMapping(value = "/404")@ResponseBodypublic String error404(HttpServletRequest request) {//json 数据读取失败JSONObject result = new JSONObject();result.put("code", 404);result.put("msg", "Page not found ");result.put("method", "error404");return result.toJSONString();}/*** 创建日期:2018年4月6日
* 代码创建:黄聪
* 功能描述:produces 表示只处理网页直接发送的请求
* @param request* @param response* @return*/
@RequestMapping(produces = "text/html", value = "/404")@ResponseBodypublic String errorHtml404(HttpServletRequest request, HttpServletResponse response) {//跳转到error 目录下的 404模板return "界面没有找到!!!";}/*** 创建日期:2018年4月6日
* 代码创建:黄聪
* 功能描述:json读取有问题的情况
* @param request* @return*/
@RequestMapping(value = "/json",produces="application/json;charset=UTF-8")@ResponseBodypublic String errorJson() {//json 数据读取失败JSONObject result = new JSONObject();result.put("code", 400);result.put("msg", "json data is error ");result.put("method", "errorJson");return result.toJSONString();}}

测试结果

测试中,我访问的json错误,提示json有问题,当我直接通过josn访问没有的界面的时候,提示没有找到,当直接通过浏览器访问没有找到的界面的时候,直接显示的没有找到,但是是我们的html的响应消息。
这里写图片描述

参考文章

https://blog.csdn.net/king_is_everyone/article/details/53080851
https://www.cnblogs.com/nosqlcoco/p/5562107.html


推荐阅读
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • ScrollView嵌套Collectionview无痕衔接四向滚动,支持自定义TitleView
    本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
雨水-_-打湿我的脸_950
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有