统一返回值

好处

可以让我们控制层【controller】统一返回值类型,不需要再考虑返回 集合或者是对象。

我们可以定义一个接口 或者 枚举,在里面定义一些返回的编码,如 404,400等,配合

统一返回编码

我这里使用的是接口:

/**
 * 自定义返回状态码
 */
public interface Constants {
    String CODE_200 = "200"; // 正确
    String CODE_400 = "400"; // 请求参数错误
    String CODE_500 = "500"; // 业务错误
    String CODE_401 = "401"; // 权限不足
    String CODE_601 = "601"; // 自定义(用户名不存在)
    String CODE_602 = "602"; // 自定义(密码不存在)
}

统一返回值类型

我这里使用一个类,然后进行改造,有两种改造方式返回方式:

先定义返回字段:

private String code; // 返回的状态码
private String msg; // 错误信息,成功的时候想携带一些也可以
private Object data; // 数据,只有正确的时候才携带
  • 通过【new】对象,返回不同的状态以及数据
// 无参构造必须有
public Result() {
}
// 通过调用这个构造器,统一返回值类型
public Result(String code, String msg, Object data) {
    this.code = code;
    this.msg = msg;
    this.data = data;
}
  • 在这个类中定义一些静态方法【成功,失败】,随时对地可以调用
/*
   返回一个200状态码,无返回信息和数据
*/
public static Result success(){
    return new Result(Constants.CODE_200,"",null);
}
/*
   返回一个200状态码,并且携带参数,无返回信息
*/
public static Result success(Object data){
    return new Result(Constants.CODE_200,"",data);
}
/*
   返回一个固定带有500状态码的错误信息
*/
public static Result error(){
    return new Result(Constants.CODE_500,"业务异常",null);
}
/*
   返回一个自定义返回状态码以及错误信息
*/
public static Result error(String code,String msg){
    return new Result(code,msg,null);
}

到这里我们就可以统一返回值类型,不需要再考虑各种返回值类型,直接点【统一】

自定义异常

 为了项目更加完整,所有最好定一个异常类,对一些可以发生异常的逻辑及时捕捉给予处理

定义

随便定义一个类,然后继承RuntimeException,

public class CustomException extends RuntimeException{
    // 返回的状态码
    private String code;

    public CustomException(String code,String msg){
        super(msg);
        this.code = code;
    }

    public String getCode() {
        return code;
    }
}

全局异常处理

@ControllerAdvice
public class GlobalExceptionHandler {

    @ResponseBody
    @ExceptionHandler(CustomException.class)
    public Result handle(CustomException customException) {
        // 抛出异常时返回的信息
        return Result.error(customException.getCode(),customException.getMessage());
    }
}

@ControllerAdvice注解

对于@ControllerAdvice拆解出来就是 Controller   Adivide,关于Adivide,他和spring中的Aop相似,用于切入点和需要织入的切面,也就是用于对 Controller 进行切面环绕,但是具体的业务织入方式则是通过结合其他的注解来实现的。

注解在类上,主要目的是:

        结合方法型注解:@ExceptionHandler,用于捕捉Controller中抛出的指定异常类型,从而达到不同的异常类型,不同的处理方式

示例

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐