springMVC异常处理流程

柯里蝉翼
• 阅读 397

springMVC异常处理流程

1.创建异常状态的类

package com.javasm.http;


//创建异常状态
public enum EnumStatus {
    //枚举对象  这里的 ; 是创建EnumStatus类时自动生成的,不是敲的
    SUCCESS(20000, "请求成功"),
    ERROR(50000, "请求失败"),
    LOGIN_EXCEPTION(40002,"用户名或者密码错误"),
    ORDER_ABNORMALITY(40003,"订单异常"),
    PARAMETER_EXCEPTIONS(40004,"参数不正确");

    private int status;//状态码
    private String message;//状态码对应的提示信息

    EnumStatus(int status, String message) {
        this.status = status;
        this.message = message;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
    //1.定义status 和message
    //2.生成getter和setter方法
    //3.生成构造方法
    //4.调用构造方法创建枚举对象
}

2.创建LoginException类,生成一个构造方法,在controller层抛出异常的时候调用

@Data
//继承RuntimeException表示运行时异常
//LoginException记录的异常需要交给全局异常进行处理,里面包含状态码和状态信息
//创建LoginException的作用:供外界调用里面的各种状态码和状态值,外界需要什么状态码,就通过LoginException获取
public class LoginException extends RuntimeException{
    private EnumStatus enumStatus;   //这里有  status   message  属性

    // 2.生成一个构造方法,供外界调用
    public LoginException(EnumStatus enumStatus) {
        this.enumStatus = enumStatus;
    }
}

3.自定义异常(异常是controller抛出的,这里为了演示方便,自定义了若干异常)

package com.javasm.controller;

import com.javasm.exception.LoginException;
import com.javasm.http.EnumStatus;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
//这里是自定义的异常,出现某个异常就通过调用LoginException里的状态值和状态码,来给这个异常起名字
public class ExceptionController {
    //登录异常
    @PostMapping("login")
    public String login(){
        if (true){
            throw new LoginException(EnumStatus.LOGIN_EXCEPTION);
        }
        return "success";
    }
    //订单异常
    @PostMapping("order")
    public String order(){
        if (true){
            throw new LoginException(EnumStatus.ORDER_ABNORMALITY);
        }
        return "success";
    }
}

4.创建ExceptionMessageBean,用来包含处理异常的状态码和状态信息

@Data
public class ExceptionMessageBean {
    private int status;
    private String message;
}

5.处理controller抛出的异常

//GloableExceptionHander是不处理异常,只是将异常变成json格式传给前端,前端将异常信息显示出来即可
/*
1.捕获异常
直接将LoginEeception这个类名当做参数传进Handle方法中,LoginEeception包含所有的异常
2.获取枚举对象
EnumStatus enumStatus = e.getEnumStatus();
3.获取枚举对象的状态码和状态值
int status = enumStatus.getStatus();
String message = enumStatus.getMessage();
4.此时的状态码和状态值就是想要显示的异常
将 status 和message放进exceptionMessageBean里面
5.将exceptionMessageBean里的对象转换成json字符串并返回
return new ResponseEntity(exceptionMessageBean, HttpStatus.OK);
*/

@RestControllerAdvice//Advice是加强的意思,表明这个类处理controller的异常
public class GloableExceptionHander {

    @ExceptionHandler(LoginException.class)//只处理LoginException.class 类异常的方法,抛出的异常都在这个类当中
    //new LoginException(EnumStatus.LOGIN_EXCEPTION)抛出的这个异常被被形参LoginException e获取到
    //ResponseEntity把对象转成json字符串传给前端
    public ResponseEntity handlerLoginException(LoginException e) {
        //获取到枚举对象
        EnumStatus enumStatus = e.getEnumStatus();
        //获取状态码
        int status = enumStatus.getStatus();
        //获取message
        String message = enumStatus.getMessage();

        // 将以上获取到的状态放进exceptionMessageBean展示在页面上
        //ResponseEntity是个泛型,里面只能存在一个参数
        ExceptionMessageBean exceptionMessageBean = new ExceptionMessageBean();
        exceptionMessageBean.setStatus(status);
        exceptionMessageBean.setMessage(message);
        return new ResponseEntity(exceptionMessageBean, HttpStatus.OK);
    }
}
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java异常处理
_1.异常的分类_Error:称为错误,有java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,程序对其不做处理。Exception:所以异常类的父类,其子类对应了各种各样可能出现的异常,一般需要用户显示的声明或捕获。RuntimeException:一类特殊的异常,如被0除,数组下标超范围等,其产生比较频繁,处理比较麻烦,如果显示
Easter79 Easter79
3年前
SpringMVC源码(五)
SpringMVC除了对请求URL的路由处理特别方便外,还支持对异常的统一处理机制,可以对业务操作时抛出的异常,unchecked异常以及状态码的异常进行统一处理。SpringMVC既提供简单的配置类,也提供了细粒度的异常控制机制。SpringMVC中所有的异常处理通过接口HandlerExceptionResolver来实现,接口中只定义了一个方法
Easter79 Easter79
3年前
Spring异常处理
@ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度@ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开@ResponseStatus:可以将某种异常映射为HTTP状态码@ControllerAdvicepublicclassExceptio
Easter79 Easter79
3年前
SpringMVC 异常处理
基本概念在SpringMVC中HandlerExceptionResolver接口负责统一异常处理。内部构造下面来看它的源码:publicinterfaceHandlerExceptionResolver{ModelAndViewresolveException(H
Wesley13 Wesley13
3年前
PostgreSQL疑难问题分析步骤
运维管理postgresql 时难免不会遇到一些疑难问题,遇到这里问题时怎么处理呢。一、分析是整库异常还是个别进程异常二、首先收集信息确认好异常类别后,可以进行收集相应的信息了整库异常1.   检查server状态执行pg\_ctlstatus\Ddatad
Wesley13 Wesley13
3年前
Java入门之异常处理
1.异常概念异常指的是程序在执行过程中出现的非正常的情况,导致JVM的非正常停止。在Java中,异常是一个类,产生异常就是创建异常对象并抛出一个异常对象。异常指的并不是语法错误,语法错误,编译不会通过,而是编译通过后,程序执行异常。异常的作用是帮助我们找到程序中的问题。2.异常产生过程解析pub
Wesley13 Wesley13
3年前
Java 异常处理
完善的异常处理有利于程序稳定。不要不停的catch异常。什么是异常??定义:异常是一个事件,它发生在程序的执行过程中,会破坏程序的正常执行在一个错误发生会在一个方法时,创建一个Exception对象来处理来保证程序能继续执行下去。当异常发生时,JVM会搜索调用栈上的所有方法,若没有找到合适的异常处理方法,JVM将会终
Easter79 Easter79
3年前
SpringBoot2.0 基础案例(03):配置系统全局异常映射处理
本文源码GitHub:知了一笑https://github.com/cicadasmile/springbootbase一、异常分类这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常。1、业务异常业务异常主要是一些可预见性异常,处理业务异常,用来提示用户
Stella981 Stella981
3年前
PlayJava Day020
1.异常Exception补充:①错误(Error)指的是致命性错误,一般无法处理②异常以类的形式封装程序可以处理的异常对应的类是java.lang.Exception及其子类运行时异常对应的类是java.lang.RuntimeException错误异常对应的类是java.lang.Error③异常相关类的继承树:java.la
Stella981 Stella981
3年前
SpringBoot2.0 基础案例(03):配置系统全局异常映射处理
本文源码GitHub:知了一笑https://github.com/cicadasmile/springbootbase一、异常分类这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常。1、业务异常业务异常主要是一些可预见性异常,处理业务异常,用来提示用户
Easter79 Easter79
3年前
SpringMVC 异常处理.
一、异常处理  Spring提供了多种方式将异常转换为响应:特定的Spring异常将会自动映射为指定的HTTP状态码。在默认情况下,Spring会将自身的一些异常自动转换为合适的状态码,从而反馈给客户端。实际上,如果没有出现任何映射的异常,响应都会带有500状态码。映射表如下:!(https://oscimg.os