一、目的
统一返回数据格式,方便前端使用,可以统一对错误进行处理
二、响应码接口&枚举类
package com.example.demo.common.http;
public interface ErrorCode {
String getCode();
String getMsg();
}
package com.example.demo.common.http;
public enum RestCode implements ErrorCode {
SUCCESS("000000", "操作成功"),
FAIL("999999", "操作失败"),
;
private final String code;
private final String msg;
RestCode(String code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public String getCode() {
return code;
}
@Override
public String getMsg() {
return msg;
}
}
三、定义返回对象格式及转换方法封装
package com.example.demo.common.http;
public class RestResult<T> {
private String code;
private String msg;
private T data;
public RestResult(ErrorCode errorCode) {
this(errorCode, null);
}
public RestResult(ErrorCode errorCode, T data) {
this.code = errorCode.getCode();
this.msg = errorCode.getMsg();
this.data = data;
}
public static <T> RestResult<T> getSuccessResult() {
return new RestResult<T>(RestCode.SUCCESS);
}
public static <T> RestResult<T> getSuccessResult(T data) {
return new RestResult<T>(RestCode.SUCCESS, data);
}
public static <T> RestResult<T> getFailResult() {
return new RestResult<T>(RestCode.FAIL);
}
public static <T> RestResult<T> getFailResult(ErrorCode errorCode) {
return new RestResult<T>(errorCode);
}
public String getCode() {
return code;
}
public RestResult<T> setCode(String code) {
this.code = code;
return this;
}
public String getMsg() {
return msg;
}
public RestResult<T> setMsg(String msg) {
this.msg = msg;
return this;
}
public T getData() {
return data;
}
public RestResult<T> setData(T data) {
this.data = data;
return this;
}
}
四、测试验证
改造controller代码
改造前代码
@PostMapping("/selectById")
public UserInfo selectById(Long id) {
return userInfoService.selectById(id);
}
改造前请求返回数据格式
{
"id": 1,
"userName": "2",
"password": "3"
}
改造后代码
@PostMapping("/selectById")
public RestResult<UserInfo> selectById(Long id) {
UserInfo userInfo = userInfoService.selectById(id);
return RestResult.getSuccessResult(userInfo);
}
改造后请求返回数据格式
{
"code": "000000",
"msg": "操作成功",
"data": {
"id": 1,
"userName": "2",
"password": "3"
}
}
文件最新整体结构
五、项目地址
PS:可以通过tag下载本文对应的代码版本
六、结尾
请求结果封装已完成,有问题可以联系chenzhenlindx@qq.com