SpringBoot 学习记录(六): Exception

SpringBoot通过AOP实现系统日志记录(三)-Mapper层日志监控及自定义异常拦截 本文是SpringBoot通过AOP实现系统日志记录(三)-Mapper层日志监控及异常拦截,若要实现Service层监控,请点击传送门: SpringBoot通过AOP实现系统日志记录(二)-Service层日志监控 由于公司业务上的需求,现在需要对整个系统做日志性能监控,方便开发人员快速定位系统瓶颈并方便开发人员去解决问题,相关代码如下: 1、引入依赖 <!-- 引入aop--... 阅读详情

这篇我们来学习公共异常的处理,不管项目使用spring_boot 还是 spring+spring_mvc 处理方式都是一样的。

一,由于前篇我们定义了aop,这里需要先注释掉doAround,doAfterThrowing两个方法,抛出的异常统一由公共异常处理

二,我们定义一个基类,作为返回到页面的数据

package com.example.base;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import com.example.constant.ReturnConstant;

/**
 * 统一返回数据
 * @author Administrator
 *
 */
public class ReturnResult implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 7475919483473633240L;

	private String status = ReturnConstant.RETURN_OK;
	
	private String msg;
	
	private Map<String,Object> result = new HashMap<String,Object>();
	
	public ReturnResult (String msg) {
		this.msg = msg;
	}
	
	public ReturnResult (String status , String msg) {
		this.status = status;
		this.msg = msg;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public Map<String, Object> getResult() {
		return result;
	}

	public void setResult(Map<String, Object> result) {
		this.result = result;
	}

	@Override
	public String toString() {
		return "ReturnResult [status=" + status + ", msg=" + msg + ", result=" + result + "]";
	}
	
	
	
	
}
三,定义自定义异常类
package com.example.exception;

import com.example.constant.ReturnConstant;

/**
 * 自定义异常
 * @author Administrator
 *
 */
public class AppException extends RuntimeException{

	/**
	 * 
	 */
	private static final long serialVersionUID = -6228059312180101897L;
	
	private String status = ReturnConstant.RETURN_OK;
	
	private String msg;
	
	public AppException (String msg) {
		this.msg = msg;
	}
	
	public AppException (String status,String msg) {
		this.status = status;
		this.msg = msg;
	}
	
	public AppException (String status,String msg,Exception ex) {
		super(ex);
		this.status = status;
		this.msg = msg;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
	
	

}
四,定义公共异常处理类

在方法上添加注解@ResponseBody,将异常信息封装后返回到页面

package com.example.exception;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.TypeMismatchException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
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 com.example.base.ReturnResult;

@ControllerAdvice
public class CommonExceptiomHandler {
	
	private Logger logger =  LoggerFactory.getLogger(this.getClass());
	
	@ExceptionHandler(IllegalArgumentException.class)
	@ResponseBody
	public ReturnResult illegalArgumentException(IllegalArgumentException e) {
		logger.error(e.getMessage());
		return new ReturnResult("param error");
	}

	@ExceptionHandler(MissingServletRequestParameterException.class)
	@ResponseBody
	public ReturnResult MissingServletRequestParameterException(MissingServletRequestParameterException e) {
		logger.error(e.getMessage());
		return new ReturnResult("missing servlet request");
	}

	@ExceptionHandler(TypeMismatchException.class)
	@ResponseBody
	public ReturnResult typeMismatchException(TypeMismatchException e) {
		logger.error(e.getMessage());
		return new ReturnResult("type mismatch error");
	}

	@ExceptionHandler(AppException.class)
	@ResponseBody
	public ReturnResult appException(AppException e) {
		logger.error(e.getMessage());
		return new ReturnResult(e.getStatus(),e.getMsg());
	}

	
	@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
	@ResponseBody
	public ReturnResult httpRequestMethodNotSupportedException(Exception e) {
		logger.error(e.getMessage());
		return new ReturnResult("http request method not supported");
	}
	
	@ExceptionHandler(Exception.class)
	@ResponseBody
	public ReturnResult defaultException(Exception e) {
		logger.error(e.getMessage());
		return new ReturnResult("system error");
	}

}
五,测试,HelloController
package com.example.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.base.ReturnResult;
import com.example.exception.AppException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RestController
public class HelloController {

	private Logger logger =  LoggerFactory.getLogger(this.getClass());	
	
	@RequestMapping("/hello/exception")
	public ReturnResult helloException(){
		logger.info("=== hello world exception");
		throw new AppException("test app exception");
	}
}
六,启动项目测试:http://localhost:8088/spring-boot/hello/exception

查看返回结果:

{
  "status": "true",
  "msg": "test app exception",
  "result": {}
}

====================================================================================

下篇我们学习缓存框架,SpringBoot 学习记录(七): Redis





springboot rollbackfor = exception.class 事务失败 springboot框架,方法上添加注解,测试事务回滚 阅读详情

相关推荐

python采集keep运动数据

我国2009年确立“全民健身日”;2012年,“广泛开展全民健身运动”写入十八大报告;到2014年上升为国家战略,全民健身的分量越来越重。推动全民健身和全民健康深度融合,通过全民健身实现全民健康。 全民健身运动在我国越来越普及,每天清晨和傍晚时分,城市的广场上、公园里,到处是运动健身的人们,跑步、打球、跳舞、游泳、打太极拳等运动项目十分丰富,人们在运动中获得越来越多的幸福感。 随之诞生出了很多运动app,例如keep,咪咕,微信等,大家可以通过app随时记录自己的运动数据,特别是对于很多的减肥人群来说,通过

Z_suger7的博客 5657

SpringBoot AOP @AfterThrowing+自定义注解+自定义异常使用

springboot aop的使用

weixin_44316557的博客 2365

中国ETF基金行情数据API接口

上交所:https://tsanghi.com/api/fin/etf/XSHG/daily?token={token}&ticker={ticker} 深交所:https://tsanghi.com/api/fin/etf/XSHE/daily?token={token}&ticker={ticker}

2401_83242712的博客 4031

spring23:Aspectj实现异常通知@AfterThrowing

切入类: package com.atChina.Test4; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotat...

m0_37564426的博客 1354

工业视觉开发者的福音:用C#玩转VisionMaster算子(非方案版完整教程)

本文为工业视觉开发者提供了一份完整的C#与VisionMaster算子二次开发教程,详细介绍了环境配置、算子调用原理、性能优化技巧及实战案例。通过模板匹配和二维码识别等实例,展示了如何高效集成VisionMaster算子到现有框架中,提升工业自动化视觉检测系统的灵活性和性能。

weixin_29280657的博客 270

数仓 - 促销敏感度、评论敏感度

1. 促销敏感度 步骤1. 首先按照最后一次下单时间及有无复购情况将用户分为四大群体: 近一年有购物行为且复购的用户 -- L1 (今年复购用户) 近一年有购物行为但无复购的用户 --L2 (今年一单购用户) 最后一次下单时间在1年之前且有复购的用户 --L3 (今年无购且只有一单用户) 最后一次下单时间在1年之前但无复购的用户 -- L4 (今年无购多单用户) 步骤2. 每一类用户群再根据优惠订单占比、每单优惠金额占比的平均值、优惠金额这三个指标进行k-means聚类,分为: 非常敏感 -

weixin_41332009的博客 1899

@AfterThrowing(处理未处理的java异常)

正如题目所说,@afterthrowing是对于java异常的处理,但是你会说Java本身也有异常机制啊 error throwable exception runtimexception 并且也有一系列的自定义异常  也有对于异常的描述   譬如:e 是异常对象,我们可以使用e.getmessage()方法对异常进行描述.但是@afterThrowing是aop形式的异常描述,是在主类文件外部来

IT_COOKIE_SAM的博客 1万+

手把手教你完成YOLOv11 PySide6目标检测界面搭建,使用Qt6设计YOLOv11检测系统,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv11 与 PySide6,构建了一个图形化界面,便于用户进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。系统功能有:目标检测程序实现图片/视频/摄像头检测,AI 问答界面(deepseek大模型接口,流式输出)、退出登录、界面保存登录状态、个人信息修改等

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 7013

提高篇——优雅处理springboot项目中的异常 自定义注解结合AOP实现全局异常处理

问题场景: 在项目开发中,出现的一些异常是可以预见的 最简单的做法就是使用try catch去处理这些异常 问题 业务代码太多的try catch使得代码不简洁,可读性变差 问题思考: 那么有没有一种方法,可以把这些异常进行统一处理以及日志输出呢?答案是有的。 自定义注解 + AOP + AbstractErrorController 分部说明: 1、首先我们定义一个自定义注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME)

Danwich的博客 985

25、BDS-3卫星信号性能与PPP-B2b增强消息完整性分析

本文对BDS-3卫星信号性能及PPP-B2b增强消息的完整性进行了系统分析。评估了MEO、IGSO和GEO卫星的轨道与时钟精度,得出BDS-3总体SISRE为0.25 m,系统完整性可覆盖99.999%的误差。分析表明SIS中断主要由时钟调整和轨道机动引起,个别卫星存在因境外监测受限导致的非计划中断。通过自研解码软件对PPP-B2b增强消息进行采集与解析,实验结果显示BDS-3和GPS的平均历元完整性率均高于98.55%,其中卫星掩码和时钟校正消息的完整性率超过99.8%。研究还发现IGSO卫星相比MEO卫

quiet的专栏 145

Plant Simulation 双深位立库开发系列教程-货架参数化

为了方便用户进行货架参数化,我们需要在交互界面上进行参数调整,右键打开RackLane,打开Dialog,在Rack_tab的tab下创建相应的对象,并创建NumberOfRightRack和NumberOfLeftRack作为数据连接对象。通过Rack._3D.VisibleGraphicGroups := ["default"]来切换需要显示的Rack,当不需要显示则可以Rack._3D.VisibleGraphicGroups := [""]即可。首先,加载默认的HBW库到模型中,确保结构树当中有。

santayana的专栏 1257

学习SpringBoot笔记以及错误记录

学习SpringBoot遇到的问题或错误

weixin_42488909的博客 4802

PCL 欧式聚类(C++详细过程版)

为充分了解算法实现的每一个细节和有待改进的地方,使用C++代码对算法实现过程进行复现。

点云侠的博客 2447

SpringBoot获取不到${exception}

一. 问题背景 自己定制一个Exception类继承RuntimeException,但是错误页面却获取不到${exception} 二. 解决方案 2.1 解决步骤 在application.properties配置如下: #获取SpringBoot的异常对象exception server.error.include-exception=true 重启程序编译运行即可 2.2 原理 错误页面的异常信息都是在DefaultErrorAttributes类中进行封装的,它有一个属性是include

Android_la的博客 591

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Springboot 定制报错 thymeleaf页面${exception}获取不到

错误内容 今天在尝试自定义报错类的时候出现了问题,页面上没有显示出excpetion 的具体类型,如下图: 检查了页面获取的时候,也没有拼错,代码如下: <main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4"> <h1>Status:[[${status}]]</h1> <h2>timestamp:[[${timestamp}]]</h2> <h2>ex

sinat_37685617的博客 1374

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

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

异常统一处理:Exception(兜底异常)

本篇内容是《异常统一处理》系列文章的重要组成部分,主要聚焦于对 `Exception(兜底异常)` 的原理解析与异常处理机制,并给出测试案例。

宋冠巡的博客 1822

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【记录】springboot Factory method ‘clientHttpRequestFactory‘ threw exception; nested exception is java.l

启动时报错 Factory method ‘clientHttpRequestFactory’ threw exception; nested exception is java.lang.IllegalArgumentException: invalid maxTotalConnection: 0 查明发现是配置文件的对应http-cliuent关于pool的配置没有同步,下次遇到可以先看一下是不是application-test.yml配置没更新 ...

weixin_43927763的博客 3693

【踩坑】SpringBoot启动失败 报错invoke Exception invoking method manageApp

报错日志为 01-Mar-2019 15:31:01.578 严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke Exception invoking method manageApp java.lang.IllegalStateException: Error ...

mmlik8878的博客 2万+

Springboot事务嵌套失效Exception记录

情景: controller调用methodA,methodA调用methodB事务时无效的。 public class ServiceA { @Autowired private DemoDao demoDao; public void methodA() { //调用方法B methodB(); } @Tran...

阿瑟与非 654

《springboot》springboot处理error和exception

error和exception的区别 https://blog.youkuaiyun.com/min996358312/article/details/65729617 springboot处理error https://blog.youkuaiyun.com/chenyidong521/article/details/79738944 springboot处理exception https://blog.cs...

kaige8312的博客 237

Springboot-Validate-全局Exception记录

SpringBoot在内部通过集成hibernate-validation,可以直接使用。项目中我们需要经常的去判断前端传递到后端的数据是否正确,这个时候需要些大量的if语句,代码相对比较中。这个时候validation就发挥了很大的作用。 Bean Validation 中内置的 验证规则: 注解 作用 @Valid 被注释的元素是一个对象,需要检查此对象的所有字段值 @Null ...

Lambda 538

SpringBoot中自定义异常中,其前端页面的exception和message的值获取不到

SpringBoot中在有模板引擎的情况下,自定义错误响应页面,但是exception和message的值获取不到,时间戳timestamp和错误码status却可以获取到, 1)自定义的异常 public class UserNotExistException extends RuntimeException{ public UserNotExistException(){ super("用户不存在"); } } 2)当用户名为come的时候,用户会不存在 @R

qq_45471034的博客 3190

Springboot--Exception

Springboot--Exception 自定义异常类 一 controller package com.example.demo.Controller; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import ...

CentOS 269

实战:java基础系列之【Exception:如何处理异常】

异常:在Java语言中, 将程序执行中发生的不正常情况称为“异常”。Error: Java虚拟机无法解决的严重问题。如: JVM系统内部错误、 资源耗尽等严重情况。比如: StackOverflowError和OOM。一般不编写针对性的代码进行处理。Exception: 其它因编程错误或偶然的外在因素导致的一般性问题, 可以使用针对性的代码进行处理。例如: 1、空指针访问 2、试图读取不存在的文件 3、网络连接中断 4、数组角标越界一种是遇到错误就终止程序的运行。

为无为,事无事,味无味。 1588

SpringBoot-单元测试-启动报错java.lang.Exception: No runnable methods

SpringBoot-测试类-启动报错【java.lang.Exception: No runnable methods】的解决办法 1. springboot 单元测试代码如下 package com.springboot.template; // import org.junit.Test; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.

weixin_44730681的博客 1240
上一篇: SpringBoot 学习记录(五): aop记录日志
下一篇: SpringBoot 学习记录(七): Redis
小小小爬虫
博客等级 码龄10年 16粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值