异常处理@ExceptionHandler遇到的问题

Nacos安装 Nacos安装报错的解决方式 nacos官网 从官网上下载nacos,然后将其解压到一个目录即可,在运行前确定是否正确安装了jdk1.8或以上版本,以及正确配置好JAVA_HOME。 最后来到安装目录双击运行startup.cmd即可启动. 报错 2021-03-12 18:38:51,277 WARN Failure in @ExceptionHandler private org.springframework.http.ResponseEntity<java.lang.String> c 阅读详情
AI摘要

本文探讨了Spring MVC中使用@ExceptionHandler处理异常的方法,并解决了配置不同注解导致的问题。通过正确配置@ControllerAdvice,实现了对Exception和特定业务异常的有效捕获。

使用@ExceptionHandler处理异常发现了两个问题

1.首先发现配置了@ExceptionHandler 处理业务异常或者原生的Exception异常时候

发现没有效果

代码如下 


@Controller

public class BaseExceptionHandler {
    private static final Logger LOGGER = LoggerFactory.getLogger(BaseExceptionHandler.class);

    /**
     * 处理 Exception类型的异常
     * @param req
     * @param res
     * @param e
     * @throws Exception
     */
    @ExceptionHandler(Exception.class)
    public void resolveException(HttpServletRequest req, HttpServletResponse res, Exception e) throws Exception {
        LOGGER.error(e.getMessage(), e);

        res.setContentType("application/json");
        BaseResponse result = new BaseResponse();
        result.setCodeAndMessage(ResponseCodeEnum.SYS_ERROR.getCode(),
                ResponseCodeEnum.SYS_ERROR.getMessage() + e.getMessage());
        WriterUtil.write(res, result);

    }

controller层代码 

这里应该抛出超时异常 

期待的效果

{
  "code": "999",
  "message": "系统异常null"
}

实际效果

{
  "timestamp": 1532075339890,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "com.fomoney.invoice.core.core.commons.exception.BizException",
  "message": "用户未授权",
  "path": "/testException"
}

没有走我们的统一异常处理

发现是因为上面两处代码一个用的注解是 @Controller 一个是@Restcontroller

统一改成@Restcontroller就可以

 

2 问题2 如果是捕获原生的异常 

@RequestMapping("/mvc29")
	@ResponseBody
	public WebAsyncTask<AuthorizationResponseEntity> mvc29() {
		Callable<AuthorizationResponseEntity> callable = new Callable<AuthorizationResponseEntity>() {
			@Override
			public AuthorizationResponseEntity call() throws Exception {
				Thread.sleep(6000);
				AuthorizationResponseEntity t = new AuthorizationResponseEntity();
				t.setCodeAndMessage("200", "test");
				return t;
			}
		};
		return new WebAsyncTask<AuthorizationResponseEntity>(4000, callable);
	}

  发现仍然没有效果

实际抛出的效果类似如下

{
  "timestamp": 1532075339890,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "com.fomoney.invoice.core.core.commons.exception.BizException",
  "message": "用户未授权",
  "path": "/testException"
}

@ControllerAdvice 需要 加在

类的前面如下

@RestController
@ControllerAdvice
public class BaseExceptionHandler {
	private static final Logger LOGGER = LoggerFactory.getLogger(BaseExceptionHandler.class);

	/**
	 * 处理 Exception类型的异常
	 * 
	 * @param req
	 * @param res
	 * @param e
	 * @throws Exception
	 */
	@ExceptionHandler(Exception.class)
	public void resolveException(HttpServletRequest req, HttpServletResponse res, Exception e) throws Exception {
		LOGGER.error(e.getMessage(), e);

		res.setContentType("application/json");
		BaseResponse result = new BaseResponse();
		result.setCodeAndMessage(ResponseCodeEnum.SYS_ERROR.getCode(),
				ResponseCodeEnum.SYS_ERROR.getMessage() + e.getMessage());
		WriterUtil.write(res, result);

	}

如上所示 即可 捕获

我们可以在BaseExceptionHandler中专门处理某个异常类 比如超时的

然后统一返回该类型超时的一些策略 ,因为该种超时可能和其他的超时返回值不一样

ruoyi项目启动报错IllegalArgumentException: When allowCredentials is true allowedOrigins cannot contain ... nested exception is java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header.的解决办法 阅读详情

相关推荐

《JeecgBoot系列》JeecgBoot开发问题记录

1.JeecgBoot下拉搜索多选失败:报Sign签名校验失败; 2.Online表单生成代码失败处理; 3.测试接口异常Parameter 'lists' not found. Available parameters are [names, param1];

https://blog.datasource.space 3201

@ExceptionHandler全局异常处理--代码更精简易懂

采用springmvc框架搭建的项目,为提高web项目代码可读性,复用率。记录一下关于项目中异常的统一处理。1、当一个Controller中有方法加了@ExceptionHandler之后,这个Controller其他方法中没有捕获的异常就会以参数的形式传入加了@ExceptionHandler注解的那个方法中。例如在一个controller中加入以下代码我们便可省去繁杂的每个方法中的try{}c...

小旭的博客 8660

springboot @Validate注解与@ExceptionHandler注解原理分析

在接口编写时,我们常常需要对输入参数做校验,并返回校验结果。以往需要自己在每个接口调用检验方法,并且调用校验结果生成方法。spingboot有很方便的处理方式,即@Validate注解,该注解功能很多,详见@Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated_昌杰的攻城狮之路的博客-优快云博客_@validated注解技术栈:spring boot2.3.3.RELEASEhibernate-validator文末附项目源

fatesunlove的博客 959

spring security oauth2中UsernameNotFoundException无法在认证失败后被捕获的问题

1.问题描述: 在认证失败后UsernameNotFoundException异常会被默认转换成BadCredentialsException异常,导致不能捕获到UsernameNotFoundException, 一般来说UsernameNotFoundException是用户名错误导致的登录失败,BadCredentialsException是用户名或者密码错误导致的登录失败。如果我们能捕获到UsernameNotFoundException就能很好的区分登录失败是哪种具体的原因,以便在某些时候做一些

咘噜biu的博客 3955

SpringBoot统一数据返回格式 & 统一异常处理

统一数据返回格式 & 统一异常处理

qq_67549203的博客 1806

Moveit +Gazebo:搭建单臂机械臂仿真平台

Moveit +Gazebo:搭建单臂机械臂仿真平台

magic_invaid的博客 5293

spring mvc 关于@ExceptionHandler 异常处理无效问题

学springmvc时学过@ExceptionHandler ,但一直都没真正用过。今天在用的时候弄了半个小时,就是不知道为什么总是报500错误,并没有进入@ExceptionHandler方法下面这个是测试方法@RequestMapping("/test") private String Test() { throw new NullPointerException();}下面这个是异常处理方...

祁东握力的博客 1万+

elementui中el-select和el-tree实现下拉树形多选功能

elementui中el-select和el-tree实现下拉树形多选功能

weixin_49203377的博客 6557

SpringMVC之异常处理【@ExceptionHandler注解的使用】

通过HandlerExceptionResolver处理异常,包括Handler映射、数据绑定及目标方法执行时发生的异常。 主要处理Handler中用@ExceptionHandler注解定义的方法。 /** * 1.在@handlerArithmeticException方法的入参中可以加入Exception类型的参数,该参数即对应发生的异常对象 * 2.@handlerArithmetic...

Dannie的博客 1708

别再只跑Demo了!用MovieLens数据集完整复现一个电影推荐系统(Python/Pandas实战)

本文详细介绍了如何利用MovieLens数据集从零构建一个完整的电影推荐系统,涵盖数据清洗、特征工程、推荐算法实现(协同过滤和矩阵分解)以及Web服务部署的全流程。通过Python和Pandas实战,读者可以掌握推荐系统的核心技术和生产环境部署技巧,不再局限于简单的Demo运行。

weixin_29062865的博客 150

中国传媒大学计算机考研初复试经验贴

中传的计算机专业考研的话主要分为两大学院:计网学院和国重,大部分专业在计网学院。

DoKiDoK的博客 1561

@ExceptionHandler注解无效问题

@ExceptionHandler注解无效问题 问题场景:如果你设置了@ExceptionHandler注解进行异常捕获返回异常信息, 但是Debug调试时,代码并未进到被@ExceptionHandler注解标注的方法里。 产生问题的可能原因及解决办法: 1.代码有问题,检查代码 2.springmvc.xml配置文件没有配置注解驱动 <!--配置springmvc 的注解驱动 --> <mvc:annotation-driven/> 3.含有@Exception

恶魔盒子 1万+

南大计算机2024保研笔试:编译原理等5门专业课考点分布与408复习避坑指南

本文详细解析了南京大学计算机2024保研笔试的考点分布与复习策略,重点突出编译原理(占比28%-32%)和离散数学的特色考核。提供跨课程复习方法、真题题型分析及高效备考建议,帮助考生突破传统408框架,应对南大独特的命题风格。

weixin_29304985的博客 345

@exceptionhandler 没有起作用,捕获不到异常

我这个项目比较老,用的 spring 版本是 spring3的。。。 springMVC没有 做 异常的拦截,,,所以我就用了 @exceptionhandler 拦截一下 异常。。。 可是发现没有起作用。。。根本没有进入这个 方法里面。。。 怎么回事?? 随便百度一下,,,也没有发现什么解...

chuncui2576的博客 1万+

深度学习图神经网络 (GNN) —— 处理图结构数据(六十九)

本文系统介绍了图神经网络(GNN)的核心概念、主流模型及其应用。主要内容包括: GNN基础:阐述了图结构数据的特性(节点数不定、连接不规则),以及GNN相比CNN/RNN的优势在于处理非欧式空间的图数据。 核心机制:重点讲解了消息传递框架(MPNN),通过聚合邻居信息迭代更新节点表示,并分析了GCN的归一化邻接矩阵计算和GAT的注意力权重机制。 典型模型: GCN:基于归一化邻接矩阵的特征传播 GAT:引入注意力机制区分邻居重要性 GraphSAGE:通过采样解决大图扩展性问题 GIN:理论表达能力最强的图

hello.reader 300

【微服务】SpringBoot 整合 FastExcel 实现导入导出操作详解

SpringBoot 整合 FastExcel 实现导入导出操作详解

congge 4235

(二十七)异常处理--注解方式@ExceptionHandler、@ControllerAdvice

需要定义在Controller中 上述用@ExceptionHandler注解的方式的缺点是比如很多控制器都需要处理相同的异常,则需要在每个处理器中定义,不能共享 这样就能实现业务处理和异常处理的方式分离、解耦 ...

FixedStar 的博客 1045

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

Coding... 1万+

SpringMVC对异常处理的支持

无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了。跟其他MVC框架一样,springMVC也有自己的异常处理机制。 springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,当然这也包括使用Spring已经为我

Elim的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring的 @ExceptionHandler注解无效问题

如果你想设置了@ExceptionHandler注解进行异常捕获返回异常信息,但是Debug调试时,代码并未进到被@ExceptionHandler注解标注的方法里,那么就检查你的配置文件是否包含<mvc:annotation-driven /> 注解,没有请添加上再尝试以下。 有关<mvc:annotation-driven />的详细说明:https://b...

weixin_34037173的博客 1366

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SpringMVC重要注解(一)@ExceptionHandler和@ResponseStatus

无论是普通的WEB项目,还是用SpringMVC实现的restful服务,都曾经历过下面两个问题: @PostMapping(path = "/selectByAcctcode")public MerAccountQueryResponse selectByAcctcode(@Valid @RequestBody MerAccountQueryRequest request,Bi

Franco的博客 4688

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

12异常处理

Spring MVC通过处理程序的异常,包括Handler映射、数据绑定以及目标方法执行时发生的异常。SpringMVC提供的的实现类​。

本人主攻Java,希望自己能成为出色的程序员。 153
上一篇: MongoDB十分钟搞定CRUD
下一篇: Storm框架基础(一)
琅琊山二当家
博客等级 码龄18年 447粉丝 322原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值