Spring Boot 定义公共结果集输出对象
admin 发布于:2022-05-09 10:11:03
阅读:loading
任何系统都应该是有一个统一的结果集作为接口请求的输出对象,SpringBoot内置了两个DefaultErrorAttributes类来统一处理接口输出(报错时的场景),默认情况接管了我们程序中的接口输出结果,它定义的属性为:timestamp、status、error、message、path(若请求结果输出为@ResponseBody时输出这5个属性,若输出至model页面时,还会输出更多的异常属性),在阿里编码规范中也声明了应定义响应信息,比如说必须包含 HTTP 状态码,errorCode、errorMessage、用户提示信息四个部分。说明:四个部分的涉众对象分别是浏览器、前端开发、错误排查人员、用户。其中输出给用户的提示信息要求:简短清晰、提示友好,引导用户进行下一步操作或解释错误原因,提示信息可以包括错误原因、上下文环境、推荐操作等。errorMessage:简要描述后端出错原因,便于错误排查人员快速定位问题,注意不要包含敏感数据信息。
正例:常见的 HTTP 状态码如下
1)200 OK:表明该请求被成功地完成,所请求的资源发送到客户端。
2)401 Unauthorized:请求要求身份验证,常见对于需要登录而用户未登录的情况。
3)403 Forbidden:服务器拒绝请求,常见于机密信息或复制其它登录用户链接访问服务器的情况。
4)404 NotFound:服务器无法取得所请求的网页,请求资源不存在。
5)500 InternalServerError:服务器内部错误。
errorCode与errorMessage包含一些状态码和中文描述,参考如下所示:
00000:一切OK,正确执行后的返回;A0001:用户端错误;A0100:用户注册错误;A0111:用户名已存在;等等等等。
注:以上几段的70%的内容选自于《Java开发手册(黄山版).pdf》,说明咱们系统肯定是需要自定义统一的结果集输出对象,不仅仅是在发生错误的时候,在响应正常的情况也是需要有全局的统一结构的请求响应结果集,本篇文章将分享本站中的结果集对象封装的实现,参考定义结构如下:
所以,本站统一的输出JSON格式的数据对象基类名称定义为BaseResult,附属的还有Success、Error、None等实现类型,关于命名也可以是BaseResponse等,相关的代码参考为:
package cn.chendd.base.result;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
/**
* 操作结果集对象
*
* @author chendd
* @date 2022/5/18 21:09
*/
@Getter
public class BaseResult {
/**
* 操作结果
*/
@ApiModelProperty("操作结果:ResultEnum")
protected String result;
/**
* 操作结果提示
*/
@ApiModelProperty("操作结果提示")
protected String message;
/**
* 数据对象
*/
@ApiModelProperty("数据对象")
protected Object data;
/**
* 设置message数据
* @param message message
* @return success对象
*/
public BaseResult message(String message) {
this.message = message;
return this;
}
/**
* 设置数据对象
* @param data data
* @return success对象
*/
public BaseResult data(Object data) {
this.data = data;
return this;
}
/**
* 操作结果枚举定义
*/
@Getter
public static enum ResultEnum {
/**
* 操作成功
*/
success ,
/**
* 操作失败
*/
error,
/**
* 默认无动作
*/
none,
;
}
}
package cn.chendd.base.result;
/**
* 操作成功结果集对象
* @author chendd
* @date 2022/5/18 21:19
*/
public class SuccessResult extends BaseResult {
private SuccessResult() {
}
/**
* 构造Success对象
* @return success对象
*/
public static SuccessResult build() {
SuccessResult result = new SuccessResult();
result.result = BaseResult.ResultEnum.success.name();
return result;
}
}
源码工程下载:源码下载.zip;
点赞