十二 定义规范统一的返回接口Rusult和异常处理--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

任务十一 应用Hutool插件实现文件导入导出

任务十二 定义统一的返回接口Rusult和异常处理

任务十一我们做了一个拓展训练,主要是应用Hutool插件实现文件的导入和导出,这个功能在有的网站中不需要,数据都在数据库中进行操作。通常,商业系统需要保证接口的一致性和规范性,方法的返回值都是统一的使用一个接口,通过标识代码判断。本次任务,我们定义统一的返回接口类型,通过本次任务,大家能够:
(1)了解前后端分离,后端接口统一返回类型的重要性;
(2)熟练定义统一返回类;
(3)熟练使用统一返回类。

1.新建common包,并新建一个Result类和一个Constants接口

在这里插入图片描述

2. Constants接口定义几个常见返回代码

代码如下:

package com.example.demo.common;

public interface Constants {
    String CODE_200="200"; //成功
    String CODE_400="400"; //参数错误
    String CODE_401="401"; //权限不足
    String CODE_500="500"; //系统错误
    String CODE_600="600"; //其他业务异常
}

3. Result类中定义几种常见返回情况

代码如下:

package com.example.demo.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


/*接口统一返回类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private String code;//运行结果
    private String msg;//告诉前端错误的原因
    private Object data;//后台所携带的数据

    public static Result success(){//无参返回正确
        return new Result(Constants.CODE_200, "",null);
    }
    public static Result success(Object data){//有参返回正确
        return new Result(Constants.CODE_200, "",data);
    }
    public static Result error(String code,String msg){ //返回失败
        return new Result(code, msg,null);
    }
    public static Result error(){ //默认一个错误类
        return new Result(Constants.CODE_500,"系统错误",null);
    }
}

4. 自定义异常

新建一个exception包,自定义两个类,一个GlobalExceptionHandler,ServiceException(自定义异常)。
在这里插入图片描述

5. 定义GlobalExceptionHandler类

-----如果有逻辑调用 ServiceException 方法,那么这边会接收他对应的参数且去执行handle方法

package com.example.demo.exception;


import com.example.demo.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class GlobalExceptionHandler {
    /**
      * 如果抛出的的是ServiceException,则调用该方法
     * @param se 业务异常
     * @return Result
     */
    @ExceptionHandler(ServiceException.class)
    @ResponseBody
    public Result handle(ServiceException se){
        return Result.error(se.getCode(),se.getMessage());
    }
}

6. 定义ServiceException类

package com.example.demo.exception;


import lombok.Getter;

//自定义异常
@Getter
public class ServiceException extends RuntimeException{
    private String code;


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

统一的返回接口类型定义好了之后,以后任务的所有方法返回都用Result,这样前端进行接口返回判断的时候也就统一了。
具体的运行流程图解是:
注意,因为不能在编辑区域打开两个接口,这里打开的是UserService,实际上第一步是先到UserController,然后调用UserService中的login方法,然后判断是否抛异常…这里的图解没有画错。

在这里插入图片描述

小伙伴如果要看具体的应用,请看任务十三 登录验证的时候就会用到统一返回接口类型了。也就是说,方法返回的都是一个code,根据code代码就知道后端操作的结果。

任务总结:

通过本次任务,大家能够:
学会springboot-接口返回统一规范封装的方法。

猜你喜欢

转载自blog.csdn.net/wdyan297/article/details/128758106