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