spring boot --- result 统一的结果集处理

1 url的命名

在实际开发中名词居多,见名知意

  • get 获取数据
  • post 添加数据
  • put 修改数据
  • delete 逻辑假删除

2 返回数据的格式

2.1 一般返回的是json数据 {状态码: 信息}

**一些常用的返回状态码 **

https://help.aliyun.com/knowledge_detail/36393.html?spm=5176.10695662.1996646101.searchclickresult.33f71bb4EstSUR&aly_as=Gf1sQix

2.2 直接在Controller中调用静态方法

2.2.1 先创建一个返回集的接口

public interface Result<T> {

}

2.2.2 定义返回信息枚举类型

public enum StatusTypeEnum {
    /**
     * 200为成功
     * 404为错误信息
     */
    SUCCESS(200,"success"),
    ERROR(404,"error");

    private String msg;
    private int status;

    StatusTypeEnum(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }
}


2.2.3 创建successResult返回集继承返回集接口

@Data
@AllArgsConstructor
@NoArgsConstructor
public class SuccessResult<T> implements Result<T> {
    private StatusTypeEnum status;
    private T data;

    public static SuccessResult succes() {
        return new SuccessResult<>(StatusTypeEnum.SUCCESS, null);
    }

    public static <T> SuccessResult succes(T data) {
        return new SuccessResult<>(StatusTypeEnum.SUCCESS, data);
    }

}

2.2.4 创建errorResult返回集继承返回集接口

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ErrorResult implements Result {
    private StatusTypeEnum status;
    private String msg;
    

    public static ErrorResult error(int status, Exception ex) {
        return new ErrorResult(StatusTypeEnum.ERROR, ex.getMessage());
    }
    public static ErrorResult error() {
        return new ErrorResult(StatusTypeEnum.ERROR, "错误");
    }

}

定义的内容需要根据业务不同来定,这个只是大体架构

2.3 利用AOP切面变成

@RestControllerAdvice + 实现ResponseBodyAdvice

将Result 封装到aop 中, Controller层 直接返回 参数,让aop去判断,返回的Result

@RestControllerAdvice
@Slf4j
public class GlobalResultAdvice  implements ResponseBodyAdvice {
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        log.error("supports");
        //为false 将不执行下面的aop方法
        return true;
    }

    /**
     *
     * @param body
     * @param returnType
     * @param selectedContentType
     * @param selectedConverterType
     * @param request
     * @param response
     * @return
     */
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        Object resp = null;
        if (body instanceof SuccessResult){
            resp = body;
        }else{
            resp =  SuccessResult.succes(body);
        }

        return resp;
    }

}


发布了56 篇原创文章 · 获赞 3 · 访问量 4438

猜你喜欢

转载自blog.csdn.net/Tang_5253/article/details/101095910