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,用来蕴含解决异样的状态码和状态信息

@Datapublic 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);    }}