SpringBoot+Response如何统一返回result结果集

 更新时间:2024年05月17日 10:49:13   作者:蚂蚁舞  
这篇文章主要介绍了SpringBoot+Response如何统一返回result结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

SpringBoot+Response统一返回result结果集

在SpringBoot开发接口中,通常会对java api统一返回result结果集,前端或者调用放可以根据返回的result结果集判断请求得到的数据是否正确,是否有效,一般情况下,使用java自定义的result结果集封装。

java统一返回数据格式

Response.java

//import com.fasterxml.jackson.annotation.JsonInclude;
 
/**
 * 蚂蚁舞
 */
//@JsonInclude(JsonInclude.Include.NON_NULL)
public class Response {
 
    private boolean state;
 
    private int code;
 
    private String msg;
 
    private Object data;
 
    private long timestamp;
 
    public Response() {}
 
    public Response(boolean state, int code, String msg) {
        this.state = state;
        this.code = code;
        this.msg = msg;
        this.timestamp = System.currentTimeMillis()/1000;
    }
 
    public Response(boolean state, int code, String msg, Object data) {
        this.state = state;
        this.code = code;
        this.msg = msg;
        this.data = data;
        this.timestamp = System.currentTimeMillis()/1000;
    }
 
    public boolean isState() {
        return state;
    }
 
    public void setState(boolean state) {
        this.state = state;
    }
 
    public int getCode() {
        return code;
    }
 
    public void setCode(int code) {
        this.code = code;
    }
 
    public String getMsg() {
        return msg;
    }
 
    public void setMsg(String msg) {
        this.msg = msg;
    }
 
    public Object getData() {
        return data;
    }
 
    public void setData(Object data) {
        this.data = data;
    }
 
    public long getTimestamp() {
        return timestamp;
    }
 
    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }
 
    @Override
    public String toString() {
        return "Response{" +
                "state=" + state +
                ", code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                ", timestamp=" + timestamp +
                '}';
    }
}

java返回结果统一封装 静态类

ResponseCode.java

/**
 * 蚂蚁舞
 */
public class ResponseCode {
 
    private static final boolean STATE_TRUE = true;
 
    private static final boolean STATE_FALSE = false;
 
 
    private static final int CODE_200 = 200;     //操作资源成功
 
    private static final int CODE_201 = 201;     //资源为空
 
 
    private static final int CODE_100 = 100;     //操作资源失败
 
    private static final int CORE_101 = 101;     //缺少必要参数
 
    private static final int CORE_102 = 102;     //参数无效返回
 
 
 
    private static final int CORE_303 = 303;     //请求token无效或者token失效到期  提示前端后,前端用户可手动刷新重新登陆
 
    private static final int CORE_304 = 304;     //请求token无效或者token失效到期  提示前端后,前端自动跳转到登录页面
 
    private static final int CORE_305 = 305;     //未携带token认证信息,提示前端后,前端用户可手动刷新重新登陆
 
    private static final int CORE_306 = 306;     //未携带token认证信息,提示前端后,前端自动跳转到登录页面
 
    private static final int CORE_307 = 307;     //未登录  前端用户可手动跳转到登录页面
 
    private static final int CORE_308 = 308;     //未登录  前端自动跳转到登录页面
 
    private static final int CORE_400 = 400;    //全局异常
    private static final int CORE_600 = 600;    //您的权限不够
 
    private static final int CORE_601 = 601;    //未经授权不可访问
 
    private static final String MSG_ALL_SUCCESS = "操作资源成功";
 
    private static final String MSG_SELECT_SUCCESS = "获取资源成功";
 
    private static final String MSG_UPDATE_SUCCESS = "更新资源成功";
 
    private static final String MSG_INSERT_SUCCESS = "新增资源成功";
 
    private static final String MSG_REMOVE_SUCCESS = "移除资源成功";
 
    private static final String MSG_DELETE_SUCCESS = "删除资源成功";
 
    private static final String MSG_ALL_FAIL = "操作资源失败";
 
    private static final String MSG_SELECT_FAIL = "获取资源失败";
 
    private static final String MSG_UPDATE_FAIL = "更新资源失败";
 
    private static final String MSG_INSERT_FAIL = "新增资源失败";
 
    private static final String MSG_REMOVE_FAIL = "移除资源失败";
 
    private static final String MSG_DELETE_FAIL = "删除资源失败";
 
    private static final String MSG_RESOURCES_EMPTY = "资源为空";
 
    private static final String MSG_PARAMETER_LACK = "缺少必要参数";
 
    private static final String MSG_PARAMETER_INVALID = "参数无效";
 
    private static final String MSG_EXCEPTION_GLOBAL = "操作异常,请重新尝试";
 
    private static final String MSG_TOKEN_INVALID = "请求token无效或者token失效到期";
 
    private static final String MSG_TOKEN_INVALID_SKIP = "请求token无效或者token失效到期,自动跳转登录页";
 
    private static final String MSG_TOKEN_NO_AUTH = "未携带token认证信息,请重新登陆";
 
    private static final String MSG_TOKEN_NO_AUTH_SKIP = "未携带token认证信息,请重新登陆, 自动跳转到登录页";
 
    private static final String MSG_TOKEN_NO_LOGIN = "未登录,请登录";
 
    private static final String MSG_TOKEN_NO_LOGIN_SKIP = "未登录,请登录 自动跳转到登录页";
 
    private static final String MSG_TOKEN_NO_PERMISSION  = "未经授权的不可访问";
 
    private static final String MSG_TOKEN_NOT_PERMISSION = "您的权限不足";
 
 
 
    /**
     * 未登录,请登录
     */
    public static Response noLoginResponse(){
        return new Response(STATE_FALSE,CORE_307,MSG_TOKEN_NO_LOGIN);
    }
 
    public static Response noLoginResponse(String msg){
        return new Response(STATE_FALSE,CORE_307,msg);
    }
 
    public static Response noLoginSkipResponse(){
        return new Response(STATE_FALSE,CORE_308,MSG_TOKEN_NO_LOGIN_SKIP);
    }
 
    public static Response noLoginSkipResponse(String msg){
        return new Response(STATE_FALSE,CORE_308,msg);
    }
 
 
    //  未携带token认证信息,请重新登陆
    public static Response noAuthHeaderTokenResponse(){
        return new Response(STATE_FALSE,CORE_305,MSG_TOKEN_NO_AUTH);
    }
 
    public static Response noAuthHeaderTokenResponse(String msg){
        return new Response(STATE_FALSE,CORE_305,msg);
    }
 
    //  未携带token认证信息,提示前端后,前端自动跳转到登录页面
    public static Response noAuthHeaderTokenSkipResponse(){
        return new Response(STATE_FALSE,CORE_306,MSG_TOKEN_NO_AUTH_SKIP);
    }
 
    public static Response noAuthHeaderTokenSkipResponse(String msg){
        return new Response(STATE_FALSE,CORE_306,msg);
    }
 
 
    //  请求token无效或者token失效到期
    public static Response invalidHeaderTokenResponse(){
        return new Response(STATE_FALSE,CORE_303,MSG_TOKEN_INVALID);
    }
 
    public static Response invalidHeaderTokenResponse(String msg){
        return new Response(STATE_FALSE,CORE_303,msg);
    }
 
    //  请求token无效或者token失效到期  前端可根据此项code跳转到登录页
    public static Response invalidHeaderTokenSkipResponse(){
        return new Response(STATE_FALSE,CORE_304,MSG_TOKEN_INVALID_SKIP);
    }
 
    public static Response invalidHeaderTokenSkipResponse(String msg){
        return new Response(STATE_FALSE,CORE_304,msg);
    }
 
 
    //  全局异常返回
    public static Response exceptionResponse(){
        return new Response(STATE_FALSE,CORE_400,MSG_EXCEPTION_GLOBAL);
    }
 
    public static Response exceptionResponse(String msg){
        return new Response(STATE_FALSE,CORE_400,msg);
    }
 
    //  您的权限不足
    public static Response notPermissionResponse(){
        return new Response(STATE_FALSE,CORE_600,MSG_TOKEN_NOT_PERMISSION);
    }
 
    public static Response notPermissionResponse(String msg){
        return new Response(STATE_FALSE,CORE_600,msg);
    }
 
    //  未经授权的不可访问
    public static Response unauthorizedPermissionResponse(){
        return new Response(STATE_FALSE,CORE_601,MSG_TOKEN_NO_PERMISSION);
    }
 
    public static Response unauthorizedPermissionResponse(String msg){
        return new Response(STATE_FALSE,CORE_601,msg);
    }
 
 
    //  缺少必要参数返回
    public static Response lackParameterResponse(){
        return new Response(STATE_FALSE, CORE_101, MSG_PARAMETER_LACK);
    }
 
    public static Response lackParameterResponse(String msg){
        return new Response(STATE_FALSE, CORE_101, msg);
    }
 
 
    //  参数无效通用返回
    public static Response invalidParameterResponse(){
        return new Response(STATE_FALSE, CORE_102, MSG_PARAMETER_INVALID);
    }
 
    public static Response invalidParameterResponse(String msg){
        return new Response(STATE_FALSE, CORE_102, msg);
    }
 
 
    //  新增成功返回
    public static Response successInsertResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_INSERT_SUCCESS);
    }
 
    public static Response successInsertResponse(Object data){
        return new Response(STATE_TRUE,CODE_200,MSG_INSERT_SUCCESS,data);
    }
 
 
    //  更新成功返回
    public static Response successUpdateResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_UPDATE_SUCCESS);
    }
 
 
    //  查询成功返回
    public static Response successSelectResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_SELECT_SUCCESS);
    }
 
    public static Response successSelectResponse(Object data){
        return new Response(STATE_TRUE, CODE_200, MSG_SELECT_SUCCESS, data);
    }
 
 
    //  移除成功返回
    public static Response successRemoveResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_REMOVE_SUCCESS);
    }
 
 
    //  删除成功返回
    public static Response successDeleteResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_DELETE_SUCCESS);
    }
 
 
    //  通用success返回
    public static Response successResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_ALL_SUCCESS);
    }
 
    public static Response successResponse(String msg){
        return new Response(STATE_TRUE,CODE_200,msg);
    }
 
    public static Response successResponse(Object data){
        return new Response(STATE_TRUE,CODE_200,MSG_ALL_SUCCESS, data);
    }
 
    public static Response successResponse(String msg, Object data){
        return new Response(STATE_TRUE,CODE_200,msg, data);
    }
 
    //  查询结果为空时成功返回(没有获取到数据)
    public static Response successEmptyResponse(){
        return new Response(STATE_TRUE,CODE_201,MSG_RESOURCES_EMPTY);
    }
 
    public static Response successEmptyResponse(String msg){
        return new Response(STATE_TRUE,CODE_201,msg);
    }
 
    public static Response successEmptyResponse(Object data){
        return new Response(STATE_TRUE,CODE_201,MSG_RESOURCES_EMPTY,data);
    }
 
 
    //  新增失败返回
    public static Response failInsertResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_INSERT_FAIL);
    }
 
    public static Response failInsertResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  更新失败返回
    public static Response failUpdateResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_UPDATE_FAIL);
    }
 
    public static Response failUpdateResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  查询失败返回
    public static Response failSelectResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_SELECT_FAIL);
    }
 
    public static Response failSelectResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  移除失败返回
    public static Response failRemoveResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_REMOVE_FAIL);
    }
 
    public static Response failRemoveResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  删除失败返回
    public static Response failDeleteResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_DELETE_FAIL);
    }
 
    public static Response failDeleteResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  通用fail返回
    public static Response failResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_ALL_FAIL);
    }
 
    public static Response failResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
    public static Response failResponse(String msg, Object data){
        return new Response(STATE_FALSE,CODE_100,msg,data);
    }
 
 
    //  自定义返回结果
    public static Response customizeResponse(boolean state, int code, String msg){
        return new Response(state,code,msg);
    }
 
    public static Response customizeResponse(boolean state, int code, String msg, Object data){
        return new Response(state, code, msg, data);
    }
 
}

springboot result统一的结果集处理

1 url的命名

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

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

2 返回数据的格式

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

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

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

}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java进阶解析Springboot上传excel存入数据库步骤

    java进阶解析Springboot上传excel存入数据库步骤

    项目需要,写了一个,批量导入的接口。因为需要使用excel去批量导入数据,所以写了一个例子,经过测试已经可以用于实际开发,这里记录一下
    2021-09-09
  • Java Arrays.fill()的具体使用

    Java Arrays.fill()的具体使用

    本文主要介绍了Java Arrays.fill()的具体使用,更好地理解Arrays.fill()方法的用法以及在实际应用中如何使用它,感兴趣的可以了解一下
    2023-09-09
  • Spring boot actuator端点启用和暴露操作

    Spring boot actuator端点启用和暴露操作

    这篇文章主要介绍了Spring boot actuator端点启用和暴露操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java利用反射动态设置对象字段值的实现

    Java利用反射动态设置对象字段值的实现

    桥梁信息维护需要做到字段级别的权限控制,本文主要介绍了Java利用反射动态设置对象字段值的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • springboot @RequiredArgsConstructor的概念与使用方式

    springboot @RequiredArgsConstructor的概念与使用方式

    这篇文章主要介绍了springboot @RequiredArgsConstructor的概念与使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • Java虚拟机GC日志分析

    Java虚拟机GC日志分析

    这篇文章主要介绍了Java虚拟机GC日志分析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Java数据结构之顺序表的实现

    Java数据结构之顺序表的实现

    线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,本文将用Java实现顺序表,感兴趣的可以了解一下
    2022-09-09
  • 2024最新版JDK安装保姆级教程

    2024最新版JDK安装保姆级教程

    这篇文章主要介绍了2024最新版JDK安装保姆级教程,JDK是Java开发的核心工具包,包含编译器、运行时环境和标准库等,安装JDK首先要从官网下载合适版本,如JDK17,然后进行安装,安装完成后需配置环境变量JAVA_HOME和Path,确保系统可以正确找到Java命令,需要的朋友可以参考下
    2024-09-09
  • 剑指Offer之Java算法习题精讲字符串操作与数组及二叉搜索树

    剑指Offer之Java算法习题精讲字符串操作与数组及二叉搜索树

    跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化
    2022-03-03
  • Java入门交换数组中两个元素的位置

    Java入门交换数组中两个元素的位置

    在Java中,交换数组中的两个元素是基本的数组操作,下面我们将详细介绍如何实现这一操作,以及在实际应用中这种技术的重要性,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论