Spring Boot2.x 通用返回数据结构

文章目录

    • 前言
    • 1、定义通用结构Result.java
    • 2、通用错误码ErrorStatus.java
    • 3、全局异常捕获GlobleExceptionHandler.java
    • 4、测试RestTestController.java
    • 5、总结

前言

在 web 开发过程中, 后端要统一返回的数据结构,便于前端处理。例如每个请求,我们都需要知道 :

  1. code : 服务器返回的状态码(主要给程序员看)。例如 : 200 : 请求成功, 500 : 服务器内部错误,400 : 未知错误
  2. status : 返回码 1:成功 10000:系统错误 10001:参数错误 …
  3. msg : 服务器的错误信息 ,主要返回给用户看。
  4. data : 服务器返回的数据。

1、定义通用结构Result.java

package com.ieslab.powergrid.demosvr.entity;

/** 

Title: PersonService

*

Description: 通用Rest请求返回结构

* * @author bingge * @date 2020-2-20 下午7:15:30 * @version V1.0 */
public class Result { //服务器返回的状态码(主要给程序员看)。例如 : 200 : 请求成功, 500 : 服务器内部错误,400 : 未知错误 private Integer code; //返回码 1:成功 10000:系统错误 10001:参数错误 ... private Integer status; // 服务器的错误信息 ,主要返回给用户看 private String msg; // 服务器返回的数据 private Object data; public Result() { } //返回操作成功 public static Result ok() { return ok(null); } //返回操作成功 public static Result ok(Object data) { Result result = new Result(); result.setCode(200); result.setStatus(1); result.setMsg("请求成功"); result.setData(data); return result; } //返回操作成功 public static Result error() { return error("请求失败"); } //返回操作成功 public static Result error(Integer code, Integer status, String msg) { Result result = new Result(); result.setCode(code); result.setStatus(status); result.setMsg(msg); return result; } //返回操作成功 public static Result error(String msg) { return error(500,0, msg); } //返回操作成功 public static Result error(ErrorStatus errorStatus) { return error(500,errorStatus.value(), errorStatus.getMessage()); } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } 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; } }

2、通用错误码ErrorStatus.java

package com.ieslab.powergrid.demosvr.entity;

/** 

Title: PersonService

*

Description: 通用Rest请求返回错误码结构

* * @author bingge * @date 2020-2-20 下午7:15:30 * @version V1.0 */
public enum ErrorStatus { /** * 系统内部错误 */ INTERNAL_SERVER_ERROR(10000, "系统错误"), /** * 参数错误 */ ILLEGAL_ARGUMENT(10001, "参数错误"), /** * 业务错误 */ SERVICE_EXCEPTION(10002, "业务错误"), /** * 非法的数据格式,参数没有经过校验 */ ILLEGAL_DATA(10003, "数据错误"), MULTIPART_TOO_LARGE(1004,"文件太大"), /** * 非法状态 */ ILLEGAL_STATE(10005, "非法状态"), /** * 缺少参数 */ MISSING_ARGUMENT(10006, "缺少参数"), /** * 非法访问 */ ILLEGAL_ACCESS(10007, "非法访问,没有认证"), /** * 权限不足 */ UNAUTHORIZED(10008, "权限不足"), /** * 错误的请求 */ METHOD_NOT_ALLOWED(10009, "不支持的方法"), /** * 参数错误 */ ILLEGAL_ARGUMENT_TYPE(10010, "参数类型错误"); private final int value; private final String message; ErrorStatus(int value, String message) { this.value = value; this.message = message; } /** * Return the integer value of this status code. */ public int value() { return this.value; } /** * Return the reason phrase of this status code. */ public String getMessage() { return this.message; } }

3、全局异常捕获GlobleExceptionHandler.java

package com.ieslab.powergrid.demosvr.utils;

import com.ieslab.powergrid.demosvr.entity.MyException;
import com.ieslab.powergrid.demosvr.entity.Result;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;

/** 

Title: GlobleExceptionHandler

*

Description: 全局异常捕捉处理

* * @author houpeibin * @date 2020-2-20 下午7:15:30 * @version V1.0 */
@ControllerAdvice public class GlobleExceptionHandler { @ResponseBody @ExceptionHandler(value = Exception.class) public Result errorHandler(Exception ex) { //判断异常的类型,返回不一样的返回值 if(ex instanceof MissingServletRequestParameterException){ return Result.error(400, 0, "全局异常捕捉:缺少必需参数:" +((MissingServletRequestParameterException) ex).getParameterName()); } else if(ex instanceof MyException){ return Result.error(400, 0, "全局异常捕捉:这是自定义异常"); } return Result.error(400, 0, "全局异常捕捉:未知异常"); } }

详细用法可以参考:Spring Boot2.x:统一异常处理

4、测试RestTestController.java

package com.ieslab.powergrid.demosvr.controller;

import com.ieslab.powergrid.demosvr.entity.ErrorStatus;
import com.ieslab.powergrid.demosvr.entity.Result;
import com.ieslab.powergrid.demosvr.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/rest")
public class RestTestController {
    @Autowired
    PersonService personService;

    @RequestMapping("/index")
    public Result getData(String id){
        Map map = new HashMap<>();
        map.put("id", id);
        return Result.ok(personService.getPersons(map));
    }

    @RequestMapping("/index2")
    public Result getData2(){
        return Result.error(ErrorStatus.INTERNAL_SERVER_ERROR);
    }

    @RequestMapping("/index3")
    public Result getData3(){
        int a = 1/0;
        return Result.ok();
    }
}

分别访问:http://localhost:8080/rest/index?id=1
在这里插入图片描述
访问:http://localhost:8080/rest/index2
在这里插入图片描述
访问:http://localhost:8080/rest/index3
Spring Boot2.x 通用返回数据结构_第1张图片

5、总结

对于错误码的定义,需要根据业务要求进行详细定义,这样,在前后端调试时,可以节省很多的时间,也会避免不必要的扯皮。

你可能感兴趣的:(Sprint,boot,spring,boot)