不想努力的程序员 2023-02-05 09:42 采纳率: 52.5%
浏览 57

java如何全局捕获异常

java在进行全局捕获异常时,总是不起作用,无法正常捕获异常,这个如此处理?具体代码如下
全局捕获异常的类ExceptionHandlerAdvice

package com.xjc.common.handler;

import com.xjc.common.exception.MyException;
import com.xjc.common.utils.ResultUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.*;

import java.nio.file.AccessDeniedException;

/**
 * @ClassName com.xjc.common.handler
 * @Author bill
 * @Describe 统一异常处理
 */
@Slf4j
//@RestControllerAdvice
@ControllerAdvice
public class ExceptionHandlerAdvice {
    /**
     * 参数格式异常处理
     */
    @ExceptionHandler({IllegalArgumentException.class})
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ResultUtils<String> badRequestException(IllegalArgumentException ex) {
        log.error("参数格式不合法:{}", ex.getMessage());
        return new ResultUtils<>(HttpStatus.BAD_REQUEST.value() + "", "参数格式不符!");
    }



    /**
     * 参数缺失异常处理
     */
    @ExceptionHandler({MissingServletRequestParameterException.class})
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ResultUtils<String> badRequestException(Exception ex) {
        return new ResultUtils<>(HttpStatus.BAD_REQUEST.value() + "", "缺少必填参数!");
    }



    @ExceptionHandler(Exception.class)
    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    public ResultUtils<String> handleUnexpectedServer(Exception ex) {
        log.error("系统异常:", ex);
        return ResultUtils.fail("系统发生异常,请联系管理员");
    }

    /**
     * 系统异常处理
     */
    @ExceptionHandler(Throwable.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResultUtils<String> exception(Throwable throwable) {
        log.error("系统异常", throwable);
        return new ResultUtils<>(HttpStatus.INTERNAL_SERVER_ERROR.value() + "系统异常,请联系管理员!");
    }
    @ExceptionHandler(MyException.class)
    @ResponseBody
    public ResultUtils<String> resolveMyException(MyException ex){
        //打印错误信息
        ex.printStackTrace();

        return ResultUtils.fail(ex.getMessage());
    }


}

MyException类代码如下

package com.xjc.common.exception;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @ClassName com.xjc.entity
 * @Author bill
 * @Describe
 */
@NoArgsConstructor
@Data
@AllArgsConstructor
@Builder
public class MyException extends RuntimeException{
    private int code;
    private String message;

}


登录的时候如果没有该用户则抛出异常,代码如下图

img

正常来讲前端收到的错误编码是205 信息是用户名不存在但是实际上是前台收到的信息是500,也没有进入ExceptionHandlerAdvice的resolveMyException方法中,这个是哪里的问题?
后台报错信息如下

img

  • 写回答

5条回答 默认 最新

  • a1767028198 2023-02-05 10:02
    关注

    springmvc的功能依赖于dispatchServlet这个入口类,当你的异常发生在它之前的时候,它怎么能处理嘞?spring security可以自定义异常处理,想要啥就能有啥

    评论

报告相同问题?

问题事件

  • 修改了问题 2月5日
  • 创建了问题 2月5日

悬赏问题

  • ¥15 扫描枪扫条形码出现问题
  • ¥15 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?