提问:
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; }
登录的时候如果没有该用户则抛出异常,代码如下图:
正常来讲前端收到的错误编码是205 信息是用户名不存在但是实际上是前台收到的信息是500,也没有进入ExceptionHandlerAdvice的resolveMyException方法中,这个是哪里的问题?
后台报错信息如下:
解答:
springmvc的功能依赖于dispatchServlet这个入口类,当你的异常发生在它之前的时候,它怎么能处理嘞?spring security可以自定义异常处理,想要啥就能有啥。
标签:java,捕获,HttpStatus,ResultUtils,ex,import,全局,异常,public From: https://www.cnblogs.com/dituirenwu/p/17092991.html