统一结果处理
为什么要使用统一结果?
1、大部分前后端项目采用 json 格式进行数据交互,定义一个统一的数据规范,有利于前后台的交互、以及信息处理。
2、java后端开发项目时,需要给前端传一些数据,可以直接将一个 list 或者 map 返回给前端,但是这样会显得很乱,并且有时候前端需要的不仅仅只是数据,可能还有一些错误码、错误信息等,这时就需要一种规范的数据格式传到前端。
返回格式的属性说明
- success: true/false,是否响应成功,设置成 boolean 类型。
- code: 200/400/500等,响应状态码。设置成 integer 类型。
- message: 访问成功/系统异常等,状态码描述,设置成 string 类型。
- data: 处理得数据,响应数据,设置成 hashmap 类型。
下面举出来一个 spring boot 项目中,通过接口返回给前端的结果格式示例:
// 举例:返回结果样式
{
"success": true,
"code": 200,
"message": "查询用户列表",
"data": {
"itms": [
{
"id": "1",
"username": "admin",
"role": "admin",
"createtime": "2020-4-24t15:32:29",
"modifiedtime": "2020-4-24t15:41:40"
},{
"id": "2",
"username": "zhangsan",
"role": "user",
"createtime": "2020-4-24t15:32:29",
"modifiedtime": "2020-4-24t15:41:40"
}
]
}
}
统一结果返回类如何定义
构造器私有,不允许进行实例化,但提供静态方法:ok、error 返回一个实例
- ok:返回一个 成功操作 的实例对象
- error:返回一个 失败操作 的实例对象
采用链式调用(即:方法返回对象为其本身,return this)----> 下面代码中涉及到
统一结果返回类:
@data
public class result {
private boolean success;
private integer code;
private string message;
private map<string, object> data = new hashmap<>();
// 默认私有构造器
private result(){
}
// 自定义构造器
private result(boolean success, integer code, string message){
this.success = success;
this.code = code;
this.message = message;
}
// 返回一个默认的 成功操作 的实例对象,默认响应状态码 200
public static result ok(){
// 使用 httpstatus 的常量表示响应状态码,这个需要导入 httpcore 依赖
return new result(true, httpstatus.sc_ok, "success");
}
// 返回一个自定义 成功操作 的实例对象
public static result ok(boolean success, integer code, string message) {
return new result(success, code, message);
}
// 返回一个默认的 失败操作 的结果,默认响应状态码为 500
public static result error() {
return new result(false, httpstatus.sc_internal_server_error, "error");
}
// 返回一个自定义 失败操作 的实例对象
public static result error(boolean success, integer code, string message) {
return new result(success, code, message);
}
// 自定义响应是否成功
public result success(boolean success) {
this.setsuccess(success);
return this;
}
// 自定义响应状态码
public result code(integer code) {
this.setcode(code);
return this;
}
// 自定义响应消息
public result message(string message) {
this.setmessage(message);
return this;
}
// 自定义响应数据,一次设置一个 map 集合
public result data(map<string, object> map) {
this.data.putall(map);
return this;
}
// 通用设置响应数据,一次设置一个 key - value 键值对
public result data(string key, object value) {
this.data.put(key, value);
return this;
}
}
代码说明:
1、统一结果返回类。方法采用链式调用的写法(即返回类本身 return this)。
2、构造器私有,不允许进行实例化,但提供静态方法 ok、error 返回一个实例。
3、静态方法说明:
- ok: 返回一个 成功操作 的结果(实例对象)。
- error: 返回一个 失败操作 的结果(实例对象)。
4、普通方法说明:
- success: 用于自定义响应是否成功
- code: 用于自定义响应状态码
- message: 用于自定义响应消息
- data: 用于自定义响应数据
5、依赖信息说明:
- 此处使用 @data 注解,需导入 lombok 相关依赖文件。
- 使用 httpstatus 的常量表示 响应状态码,需导入 httpcore 相关依赖文件。
注意:使用 httpstatus 时,要加这个依赖:
<dependency>
<groupid>org.apache.httpcomponents</groupid>
<artifactid>httpcore</artifactid>
<version>4.4.13(版本号)</version>
</dependency>
<dependency>
<groupid>org.projectlombok</groupid>
<artifactid>lombok</artifactid>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
4、使用:修改某个 controller 如下所示:
@getmapping("selectone")
public result selectone(integer id) {
emp emp = this.empservice.querybyid(id);
if (emp == null) {
return result.error().message("用户不存在");
}
return result.ok().data("items", emp).message("查询成功");
}

4.1 成功:若查询用户成功,调用 ok 返回查询到的结果。
{
"success": true,
"code": 200,
"message": "查询成功",
"data": {
"items": {
"id": 1,
"name": "tom",
"salary": 6000.0,
"age": 20,
"email": "tom@163.com"
}
}
}
4.2 失败:若查询用户失败,调用 error 返回查询失败信息。
{
"success": false,
"code": 500,
"message": "用户不存在",
"data": {}
}
总结
到此这篇关于java中统一返回前端格式及统一结果处理返回的文章就介绍到这了,更多相关java统一结果处理返回内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论