spring boot 统一返回对象

205 阅读1分钟

摘要

前端调用后台接口时,我们希望有一个统一的返回格式,以便于前端对放回类型的封装。

统一返回实体对象

/**
 * 统一全局返回对象
 */
public class ResponseData {
    
    /**
     * 返回调用状态
     */
    private Boolean status = true;
    /**
     * 返回编号代号
     *         1 - 调用成功
     *         0 - 调用失败
     */
    private int code = 1;
    /**
     * 返回的信息
     */
    private String message ;
    /**
     * 返回的数据
     */
    private Object data;

   ... setter getter

}

Controller层返回统一对象

 @GetMapping("/hello")
    public ResponseData hello(){
        ResponseData responseData = new ResponseData();
        responseData.setMessage("success");
        responseData.setData(null);
        return responseData;
    }

当遇到调用时出现异常情况时。

/**
 * 统一异常处理对象
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResponseData defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
        ResponseData r = new ResponseData();
        //路径没找到
        if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) {
            r.setCode(404);
            r.setMessage("请求的路径不存在");
        } else {
            r.setCode(500);
        }
        return r;
    }
}

application.yml中增加配置信息

spring:
  # 出现错误时, 直接抛出异常
  mvc:
    throw-exception-if-no-handler-found: true
  # 不要为我们工程中的资源文件建立映射
  resources:
    add-mappings: false

请求http://localhost:8080/heello,由于我们没有编写heello接口调用时将返回{"status":true,"code":404,"message":"请求的路径不存在","data":null}

总结

统一返回对象,利用调用者对数据的处理,也使我们的返回类型更加的简洁明了。