一、定义统一返回结果
1、数据格式的定义
项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端对数据的操作更一致、轻松。
一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要返回的具体数据就可以。但是一般会包含状态码、返回消息、数据这几部分内容
例如,我们的系统要求返回的基本数据格式如下:
成功:
{
"code": 0,
"message": "成功",
"data": 数据
}
失败:
{
"code": -1,
"message": "失败",
"data": null
}
因此,我们定义统一结果
{
"code": 数字, //业务响应码
"message": 字符串, //返回消息
"data": 对象 //返回数据
}
2、创建枚举
在indi-common
模块的com.indi.common.result
包下
创建ResponseEnum.java
@Getter
@AllArgsConstructor
@ToString
public enum ResponseEnum {
SUCCESS(0, "成功"),
ERROR(-1, "服务器内部错误"),//-1xx 服务器错误
BAD_SQL_GRAMMAR_ERROR(-101, "sql语法错误"),
SERVLET_ERROR(-102, "servlet请求异常"), //-2xx 参数校验
UPLOAD_ERROR(-103, "文件上传错误"),
EXPORT_DATA_ERROR(104, "数据导出失败"),
//-2xx 参数校验
BORROW_AMOUNT_NULL_ERROR(-201, "借款额度不能为空"),
MOBILE_NULL_ERROR(-202, "手机号码不能为空"),
MOBILE_ERROR(-203, "手机号码不正确"),
PASSWORD_NULL_ERROR(204, "密码不能为空"),
CODE_NULL_ERROR(205, "验证码不能为空"),
CODE_ERROR(206, "验证码错误"),
MOBILE_EXIST_ERROR(207, "手机号已被注册"),
LOGIN_MOBILE_ERROR(208, "用户不存在"),
LOGIN_PASSWORD_ERROR(209, "密码错误"),
LOGIN_LOKED_ERROR(210, "用户被锁定"),
LOGIN_AUTH_ERROR(-211, "未登录"),
USER_BIND_IDCARD_EXIST_ERROR(-301, "身份证号码已绑定"),
USER_NO_BIND_ERROR(302, "用户未绑定"),
USER_NO_AMOUNT_ERROR(303, "用户信息未审核"),
USER_AMOUNT_LESS_ERROR(304, "您的借款额度不足"),
LEND_INVEST_ERROR(305, "当前状态无法投标"),
LEND_FULL_SCALE_ERROR(306, "已满标,无法投标"),
NOT_SUFFICIENT_FUNDS_ERROR(307, "余额不足,请充值"),
PAY_UNIFIEDORDER_ERROR(401, "统一下单错误"),
ALIYUN_SMS_LIMIT_CONTROL_ERROR(-502, "短信发送过于频繁"),//业务限流
ALIYUN_SMS_ERROR(-503, "短信发送失败"),//其他失败
WEIXIN_CALLBACK_PARAM_ERROR(-601, "回调参数不正确"),
WEIXIN_FETCH_ACCESSTOKEN_ERROR(-602, "获取access_token失败"),
WEIXIN_FETCH_USERINFO_ERROR(-603, "获取用户信息失败");
// 响应状态码
private Integer code;
// 响应信息
private String message;
}
3、定义统一结果类
创建R.java
@Accessors(chain = true) // 小技巧:使set方法直接返回对象
@Data
public class R {
private Integer code;
private String message;
private Map<String,Object> data = new HashMap<>();
/**
* 私有化构造函数,不让其它类直接访问
*/
private R(){}
/**
* 返回成功结果
* @return
*/
public static R ok(){
R r = new R();
r.setCode(ResponseEnum.SUCCESS.getCode());
r.setMessage(ResponseEnum.SUCCESS.getMessage());
return r;
}
/**
* 返回失败结果
* @return
*/
public static R error(){
R r = new R();
r.setCode(ResponseEnum.ERROR.getCode());
r.setMessage(ResponseEnum.ERROR.getMessage());
return r;
}
/**
* 自定义返回结果
* @param responseEnum
* @return
*/
public static R setResult(ResponseEnum responseEnum){
R r = new R();
r.setCode(responseEnum.getCode());
r.setMessage(responseEnum.getMessage());
return r;
}
/**
* 自定义为data赋值
* @param value
* @param o
* @return
*/
public R setData(String value, Object o){
this.data.put(value,o);
return this;
}
}
二、使用统一返回结果
1、修改listAll
修改service-core
模块
AdminIntegralGradeController.java
List<IntegralGrade> list = integralGradeService.list();
return R.ok().setData("list",list).setMessage("获取成功");
2、修改removeById
if (result) {
return R.ok().setMessage("删除成功");
}else {
return R.error().setMessage("删除失败");
}
3、新增数据
@ApiOperation("新增积分等级")
@PostMapping("/save")
public R save(
@ApiParam(value = "积分等级对象", required = true)
@RequestBody IntegralGrade integralGrade) {
boolean result = integralGradeService.save(integralGrade);
if (result) {
return R.ok().setMessage("添加成功");
} else {
return R.error().setMessage("添加失败");
}
}
测试
添加只需要这3个参数即可
4、根据id查询
@ApiOperation("根据id获取积分等级")
@GetMapping("/get/{id}")
public R getById(
@ApiParam(value = "数据id", required = true)
@PathVariable Long id) {
IntegralGrade integralGrade = integralGradeService.getById(id);
if (integralGrade != null) {
return R.ok().setData("record", integralGrade);
} else {
return R.error().setMessage("数据获取失败");
}
}
测试
根据id查询数据
5、根据id修改
@ApiOperation("修改积分等级")
@PutMapping("/update")
public R updateById(
@ApiParam(value = "积分等级对象", required = true)
@RequestBody IntegralGrade integralGrade) {
boolean result = integralGradeService.updateById(integralGrade);
if (result) {
return R.ok().setMessage("更新成功");
} else {
return R.error().setMessage("更新失败");
}
}
测试
修改则是选择你要修改的参数