首页 > 编程语言 >java如何全局捕获异常

java如何全局捕获异常

时间:2023-02-05 10:45:41浏览次数:40  
标签:java 捕获 HttpStatus ResultUtils ex import 全局 异常 public

提问:

 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

相关文章

  • 读Java实战(第二版)笔记01_Java的变化
    1. 语言的演变1.1. C和C++仍然是构建操作系统和各种嵌入式系统的流行工具1.2. Java和C#等安全型语言在诸多运行资源不太紧张的应用中已经取代了C和C++1.3. Java可......
  • javascript-cnblog
    1.原型和原型链1.1原型js中,函数可以有属性,每个函数都有一个特殊的属性叫做原型prototype(原型)1.2原型链当我们访问某个对象的属性时,如果该对象本身没有,就会到对象......
  • Forest – 开源的 Java HTTP 客户端框架
    什么是Forest?Forest是一个开源的JavaHTTP客户端框架,它能够将HTTP的所有请求信息(包括URL、Header以及Body等信息)绑定到您自定义的Interface方法上,能够通过调......
  • 如何用k8s运行、部署Java项目
    k8s的常用命令  kubectlgetingress-nprodkubectlgetdeployment-nprodkubectlgetpod-nprodkubectlgetservice-nprodkubectllogs-f-nprod......
  • 打包JavaScript的代码 (ES67891011 转为 ES5)
    NodeJS安装必要的工具包#初始化项目npminit-yes##安装babelbrowserify等包npmibabel-clibabel-preset-envbrowserify-D使用##babel转换指定文件夹下的代......
  • Java 实例 - int数组转化成List简便的方法
    如下:@Testpublicvoidtest5(){int[]array={1,2,5,5,5,5,6,6,7,2,9,2};/*int[]转list*///方法一:需要导入apacheco......
  • JavaScript学习笔记—DOM:通过属性读取样式
    读取的样式都是只读,无法修改获取元素内部的宽度和高度(包括内容区和内边距)element.clientHeightelement.clientWidth获取元素的可见框的大小(包括内容区、内边距和边框)......
  • 学习java第八天
    运算符   %=莫预算java等号是用两个等号==,不等于!=instanceof前四个必须掌握与或非重点掌握前四个ide快捷键ctrl+d复制本行到下一行package......
  • java中包(package)
    java中包(package)1、java中包的了解:在java中的包和我们文件系统层次结构是一一对应的。2、如果在java源文件中没定义package语句,那么该类就在默认包或者叫无名包中。3......
  • java学习day01—Markdown学习
    Markdown学习标题三级标题四级标题字体Hello,World!Hello,World!Hello,World!Hello,World!引用选择狂神说java,走向人生巅峰分割线图片超链接点击跳转到......