记录一次@RestControllerAdvice 无法正确捕获异常的问题处理

先上错误代码

 
@Validated
@RestController
@RequestMapping("/mcn")
public class McnController extends BaseController {
/**
     * 功能描述:  信息编辑 直接修改信息,不用走任务
     * @return: void
     * @Author: jln
     * remark: 组长和总监有修改权限
     */
    @ExceptionHandler(RuntimeException.class)
    @Log(title = "供应商信息编辑", businessType = BusinessType.UPDATE)
    @PreAuthorize("@ss.hasPermi('mcn:update')")
    @PostMapping("/update")
    public AjaxResult update(@RequestBody @Validated McnUpdateDto mcn){

        logger.info("---------------信息编辑  start  ----------------- ");
        logger.info("请求接口:mcn/update");
        logger.info("请求参数n:" + mcn);
            

        String msg = mcnService.updateMcn(mcn);
        if(StringUtil.isNotEmpty(msg)){
            return AjaxResult.error(msg);
        }
        logger.info("----------------- 供应商信息编辑  end  ----------------- ");
        return  AjaxResult.success("操作成功");
    }
}

错误的异常返回例子:

记录一次@RestControllerAdvice 无法正确捕获异常的问题处理_第1张图片

正确的异常返回格式:

记录一次@RestControllerAdvice 无法正确捕获异常的问题处理_第2张图片

问题描述: 问题方法在有异常时,无法被全局异常处理器统一处理成固定方式返给前端

错误原因: 本身全局异常处理器已针对各种异常进行了处理,我在方法上又多此一举的使用了@ExceptionHandler(RuntimeException.class),造成在一个方法上同时出现了两种异常的处理,产生了互斥,系统无法判断使用哪一种,所以无法进入到全局异常拦截器进行拦截

在排查问题时,其它异常不生效的原因,如果本身已使用全局异常处理器,方法中又使用了try catch,也会造成异常无法被全局异常处理器处理

记录一下

你可能感兴趣的:(异常,java,spring)