ps23:java后端--统一异常处理

该博客探讨了Java后端如何实现统一的异常处理。首先,介绍了当发生异常时,如何设置返回状态码为500。接着,讲解了如何通过统一的方式,将异常处理结果返回为201状态码。最后,重点讨论了实现全局异常处理的方法,以提高代码的健壮性和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.返回一个异常为500

请添加图片描述

2.统一返回一个异常为201

请添加图片描述

统一异常处理


注意:common为项目中共用的代码!!
============1.1 HospitalSetController==================
  //5.根据id获取医院设置
    @ApiOperation(value = "根据id获取医院设置")//
    @GetMapping("getHospSEt/{id}")
    public Result getHospitalSet(@PathVariable Long id){
        //模拟异常
        int aa=2/0;//-----【加入这一行代码】
        HospitalSet hospitalSet = hospitalSetService.getById(id);
        return  Result.ok(hospitalSet);
    }

=======1.2测试======================
浏览器中访问http://localhost:8201/swagger-ui.html
点击GET /admin/hosp/hospitalSet/getHospSEt/{id}
输入表中没有的id号,除0外
比如:id为1111111
点击try it out后,显示结果为
Response Body
{
  "code": 500,//【关键,此处只返回一个异常为500】
  "message": "失败",
  "data": null,
  "ok": false
}

============2.1 加入HospitalSetController==================
  //5.根据id获取医院设置
    @ApiOperation(value = "根据id获取医院设置")//
    @GetMapping("getHospSEt/{id}")
    public Result getHospitalSet(@PathVariable Long id){
        //模拟异常
        int aa=2/0;//-----
        HospitalSet hospitalSet = hospitalSetService.getById(id);
        return  Result.ok(hospitalSet);
    }

===========2.2 加入GlobalExceptionHandler================
package com.koki.yygh.common.exception;

import com.koki.yygh.common.result.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 全局异常处理类
 *
 */
@ControllerAdvice
@SuppressWarnings("ALL")
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    //HospitalSetController类中@RestController注解有个@ResponseBody注解进行输出,此处也使用到
    @ResponseBody //返回的结果以json数据进行输出!
    public Result error(Exception e){//程序出现异常不执行
        e.printStackTrace();
        return Result.fail();
    }

}

=======2.3 测试===【全局异常处理类】===================
浏览器中访问http://localhost:8201/swagger-ui.html
点击GET /admin/hosp/hospitalSet/getHospSEt/{id}
输入表中没有的id号,除0外
比如:id为1111111
点击try it out后,显示结果为
Response Body
{
  "code": 201,//【关键,此处为返回统一的一个异常为201】
  "message": "失败",
  "data": null,
  "ok": false
}
============3.1 HospitalSetController==================
  //5.根据id获取医院设置
    @ApiOperation(value = "根据id获取医院设置")//
    @GetMapping("getHospSEt/{id}")
    public Result getHospitalSet(@PathVariable Long id){
         
      try{【加入这些异常代码】
            //模拟异常
            int aa=2/0;//-----
        }catch(Exception e){
            throw new YyghException("失败",201);
        }
        HospitalSet hospitalSet = hospitalSetService.getById(id);
        return  Result.ok(hospitalSet);
    }
===========3.2 GlobalExceptionHandler类加入以下的代码================
 @ExceptionHandler(YyghException.class)
    //HospitalSetController类中@RestController注解有个@ResponseBody注解进行输出,此处也使用到
    @ResponseBody //返回的结果以json数据进行输出!
    public Result error(YyghException e){//程序出现异常不执行
        e.printStackTrace();
//        return Result.fail();//法一
        return Result.build(e.getCode(), e.getMessage());//法二
    }
=======3.3加入 YyghException======================
package com.koki.yygh.common.exception;

import com.koki.yygh.common.result.ResultCodeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * 自定义全局异常类
 *
 */
@SuppressWarnings("ALL")
@Data
@ApiModel(value = "自定义全局异常类")
public class YyghException extends RuntimeException {

    @ApiModelProperty(value = "异常状态码")
    private Integer code;

    /**
     * 通过状态码和错误消息创建异常对象
     * @param message
     * @param code
     */
    public YyghException(String message, Integer code) {
        super(message);
        this.code = code;
    }

    /**
     * 接收枚举类型对象
     * @param resultCodeEnum
     */
    public YyghException(ResultCodeEnum resultCodeEnum) {
        super(resultCodeEnum.getMessage());
        this.code = resultCodeEnum.getCode();
    }

    @Override
    public String toString() {
        return "YyghException{" +
                "code=" + code +
                ", message=" + this.getMessage() +
                '}';
    }
}

=======3.4 测试====【自定义异常处理方法】==================
浏览器中访问http://localhost:8201/swagger-ui.html
点击GET /admin/hosp/hospitalSet/getHospSEt/{id}
输入表中没有的id号,除0外
比如:id为1111111
点击try it out后,显示结果为
Response Body
{
  "code": 201,//【关键,此处为返回统一的一个异常为201】
  "message": "失败",
  "data": null,
  "ok": false
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值