java中统一返回前端格式,统一结果处理返回
统一结果处理为什么要利用统一结果?
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("查询成功");
}
https://i-blog.csdnimg.cn/direct/7c80dcbc317b484292501c598a48c8bb.png
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": {}
}
至此,文章结束!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]