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

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

1、打断点看走到哪了, 看ControllerAdvice对用了没
2、205异常,采用一下统一返回,不要抛出试下。

项目结构发一下,可能是全局异常Bean没有被注入进去。

如果返回500,应该是走了前面的方法,不行你就只捕获Throwable.class,然后通过ex instanceof MyException来处理

img