摘要
前端调用后台接口时,我们希望有一个统一的返回格式,以便于前端对放回类型的封装。
统一返回实体对象
/**
* 统一全局返回对象
*/
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}
总结
统一返回对象,利用调用者对数据的处理,也使我们的返回类型更加的简洁明了。