统一处理异常和数据返回格式

统一处理异常和数据返回格式

为了解决异常处理和返回对象不统一,我们来实现统一处理异常和数据返回格式

1. 基本思路

统一处理异常和数据返回格式_第1张图片

2. Result 类

public class Result {
    private Integer code;
    private String msg;
    private Object data;
    
    /**成功且带数据**/
    public static Result success(Object object){
        Result result = new Result();
        result.setCode(200);
        result.setMsg("success");
        result.setData(object);
        return result;
    }
    /**成功但不带数据**/
    public static Result success(){
        return success(null);
    }
    /**失败**/
    public static Result error(Integer code,String msg){
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
    
    // ...省略get,set,toString 方法
}

3. 自定义 ServiceException 异常类

public class ServiceException extends RuntimeException{
    public ExceptionMessage;

    public ServiceException(String message){
        super(message);
    }

    public ExceptionMessage getExceptionMessage() {
        return ExceptionMessage;
    }
}

4. ExceptionMessage 枚举类

public enum ExceptionMessage {
    /** 找不到用户 **/
    USER_NOT_EXIST(404 , "用户不存在"),
    /** 用户名与密码不匹配 **/
    USER_PASSWORD_ERROR(400 ,"用户名与密码不匹配");


    private int num;
    private String desc;

    ExceptionMessage(int num, String desc) {
        this.num = num;
        this.desc = desc;
    }
    
    // ...省略get,set 方法
}

5. 全局异常处理

@ControllerAdvice
@Component
public class GlobalExceptionHandler {
    
    @ExceptionHandler
    @ResponseBody
    public Result handle(ServiceException exception) {
        int code = exception.getExceptionMessage.getNum;
    	String message = exception.getExceptionMessage.getDesc;
        /** 统一返回异常信息 **/
        return Result.error(code , message);
    }
}

@ControllerAdvice:定义全局异常处理类。

@Component:实例化到spring容器。

@ExceptionHandler:声明异常处理方法。

@ResponseBody:返回 json 格式。

6. 统一数据返回格式

@RequestMapping("api/user")
@RestController
public class UserController {
    // ...

    @GetMapping("/{id}")
    public Result getUserById(@PathVariable String id) {
        User UserInfo = UserService.getUserById(id);
        return result.success(UserInfo);
    }
}

关注我的微信公众号,查看更多文章,第一时间收到我的文章。

统一处理异常和数据返回格式_第2张图片

你可能感兴趣的:(SpringBoot)