实验报告1--Spring Boot自定义异常处理

news/2024/9/23 7:57:11/

实验报告1-Spring Boot自定义异常处理(1)

实验报告1-Spring Boot自定义异常处理(2)

资源下载

一、实现思路

实现根据员工id删除员工对象的功能。

要求:1、处理Exception异常。

2、处理自定义的MyException异常。

3、处理404异常。

二、实验步骤

新建maven项目,引入pom依赖,定义SpringBoots入口函数

1、处理Exception异常
(1)新建Employee Controller

controller包,EmployeeController.java

@RestController
@RequestMapping("/employee")
public class EmployeeController {@RequestMapping("/deleteOneById/{id}")public String deleteOneById(@PathVariable Integer id){System.out.println("id = "+id);return "OK";}
}
(2)定义返回结果包装类Result

util包,Result.java

public class Result<T> {private Integer status;//返回状态值private String msg;//返回信息private T data;//传送的数据private static final Integer OK_CODE=200;private static final String OK_MSG="SUCCESS";private static final Integer ERROR_CODE=0;private static final String ERROR_MSG="ERROR";public Result(Integer status, String msg, T data) {this.status = status;this.msg = msg;this.data = data;}public Result(Integer status, String msg) {this.status = status;this.msg = msg;}public Result() {this(OK_CODE, OK_MSG);}public static <T> Result<T> success(){return new Result<T>();}
​public static <T> Result<T> success(T result){Result<T> response = new Result<T>();response.setData(result);return response;}public static <T> Result<T> error() {return new Result<T>(ERROR_CODE, ERROR_MSG);}public static <T> Result<T> error(Integer code, String msg) {return new Result<T>(code, msg);}public void setErrorCode() {this.status = ERROR_CODE;}//Get,Set,ToString方法
}
(3)新建异常处理

handler包,MyExceptionHandler.java

@ControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(Exception.class)@ResponseBodypublic Result hanldeException(Exception exception){return new Result(0,exception.getMessage());}
}
2、处理MyException异常
(1)定义异常信息枚举ErrorEnum

exception包,ErrorEnum.java

public enum ErrorEnum {//400系列BAD_REQUEST(400,"请求的数据格式不符!"),UNAUTHORIZED(401,"登录凭证过期!"),FORBIDDEN(403,"抱歉,你无权限访问!"),NOT_FOUND(404, "请求的资源找不到!"),//500系列INTERNAL_SERVER_ERROR(500, "服务器内部错误!"),SERVICE_UNAVAILABLE(503,"服务器正忙,请稍后再试!"),//未知异常UNKNOWN(10000,"未知异常!");private Integer code;private String message;ErrorEnum(Integer code, String message) {this.code = code;this.message = message;}public Integer getCode() {return code;}public String getMessage() {return message;}
}
(2)新建自定义异常类

exception包,MyException.java

public class MyException extends Exception{private final Integer code;private final String message;public MyException(Integer code, String message) {this.code = code;this.message = message;}public MyException(ErrorEnum errorEnum) {this(errorEnum.getCode(),errorEnum.getMessage());}public Integer getCode() {return code;}@Overridepublic String getMessage() {return message;}
}
(3)新建异常处理

handler包,MyExceptionHandler.java

@ControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(MyException.class)@ResponseBodypublic Result hanldeMyException(MyException myException){return new Result(myException.getCode(), myException.getMessage());}
}
(4)新建Employee Service

service包,EmployeeService.java

@Service
public class EmployeeService {public void deleteOne(Integer id) throws MyException {if (id < 1){//数据校验失败,抛出自定义异常throw new MyException(ErrorEnum.BAD_VERIFY);}        //执行删除逻辑}
}
(5)完善Employee Controller

controller包,EmployeeController.java

@RestController
@RequestMapping("/employee")
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@RequestMapping("/deleteOne/{id}")public Result deleteOne(@PathVariable Integer id) throws MyException {Result result = new Result();employeeService.deleteOne(id);       return result;}
}
3、处理404异常
(1)修改配置文件

resources目录,application.yml,启用默认的错误处理页面

# 启用默认的错误处理页面
server:error:whitelabel:enabled: false
(2)新建Employee MyErrorController

controller包,MyErrorController.java,实现ErrorController接口

@Controller
public class MyErrorController implements ErrorController {@RequestMapping("/error")@ResponseBodypublic String handleError() {return "404, 请求的资源不见了";}
}


http://www.ppmy.cn/news/1529219.html

相关文章

常见项目场景题1(数据量很大时如何去重,实现超时处理)

数据很多&#xff0c;限制内存&#xff0c;如何去重 对于大数据量去重的场景&#xff0c;我们可以考虑使用位图(Bitmap) Bitmap 是使用二进制来表示某个元素是否存在的数组。用0和1来表示存在与不存在 使用Bitmap的话&#xff0c;一个数字占用1bit&#xff0c;大大减少内存消耗…

Python | Leetcode Python题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; class Solution:def levelOrder(self, root: Node) -> List[List[int]]:if not root:return []ans list()q deque([root])while q:cnt len(q)level list()for _ in range(cnt):cur q.popleft()level.append(cur.val)for child in c…

医院信息化运维监控:确保医疗系统的稳定与安全

在当今数字化时代&#xff0c;医院的信息化水平直接关系到医疗服务的效率和质量。随着医疗信息化的不断推进&#xff0c;医院对信息化运维监控的需求也日益增强。特别是IT软硬件资源监控和机房动环监控&#xff0c;它们在保障医院信息系统稳定运行中发挥着至关重要的作用。 首先…

大话Python|基础语法(上)

一、单行注释 以下代码输出一个Hello World&#xff01;字符串 在Python代码中&#xff0c;注释会自动被Python解析器忽略 print(Hello World) 二、多行注释 在Python代码中&#xff0c;注释一共有两种形式&#xff1b; 1、单行注释&#xff1a;注释的内容只有一行 2、多行…

使用思科搭建企业网规划训练,让网络全部互通,使用规则提高工作效率。

1. 企业背景&#xff1a; 某企业分为销售部、行政部、人力资源部、财务部、业务部、接待中心等主要六个部门&#xff1b;配置网管中心&#xff0c;允许网络管理员登录企业交换机和路由器对企业网络进行管理&#xff1b;配置服务器集群&#xff0c;设置FTP、DNS、WEB服务器&am…

DPDK 简易应用开发之路 2:UDP数据包发送及实现

本机环境为 Ubuntu20.04 &#xff0c;dpdk-stable-20.11.10 发送数据包的通用步骤 初始化DPDK环境&#xff1a; 调用 rte_eal_init() 来初始化DPDK的EAL&#xff08;环境抽象层&#xff09;&#xff0c;这是所有DPDK应用程序的第一步&#xff0c;用于初始化硬件、内存和逻辑核…

Cocos Creator3.x设置动态加载背景图并且循环移动

效果图 项目结构 项目层级结构&#xff1a; 预制&#xff1a; 代码 import { _decorator, CCFloat, Component, Node, Sprite, instantiate, Prefab, assert, UITransform } from cc; const { ccclass, property } _decorator;/*** 背景脚本*/ ccclass(Background) expor…

使用 HFD 加快 Hugging Face 模型和数据集的下载

Hugging Face 提供了丰富的预训练模型和数据集&#xff0c;而且使用 Hugging Face 提供的 from_pretrained() 方法可以轻松加载它们&#xff0c;但是&#xff0c;模型和数据集文件通常体积庞大&#xff0c;用默认方法下载起来非常花时间。 本文将指导你如何使用 HFD&#xff08…