由于
- 每个开发者,对自己的代码都有一套自己的逻辑和哲学,返回值就千变万化。
- 带来的问题很明显,接口的调用者,就开始尝试一个错觉或者不明确的想象。
从而统一返回结构的格式-封装统一返回的R类。
这个方式是参考,springmvc提供的ResponseEntity和HttpStatus一个枚举类而设计的,之所以不用自带的,因为可能不太满足开发需要,所以自定义了一个。
实现统一返回格式
第一步,我们需要定义一个R类,来确定返回的格式,成功就一种情况,但是失败有很多情况,所以此时就需要第二步,定义一个枚举类,来统一管理错误的code和message。
、
第一步 定义R类
package com.kuangstudy.common;
/**
* @description:
* @author: xuke
* @time: 2021/6/23 21:47
*/
import lombok.Data;
@Data
public class R {
// 返回的编号
private Integer code;
// 返回的数据,数据类型N中,
private Object data;
// 返回的信息
private String message;
private R() {
}
/**
* @Description 成功返回
**/
public static R success(Object data, String message) {
R r = new R();
r.setCode(ResponseEnum.SUCCESS.getCode());
r.setData(data);
r.setMessage(message == null ? ResponseEnum.SUCCESS.getMessage() : message);
return r;
}
/**
* @Description 成功返回
**/
public static R success(Object data) {
return success(data, null);
}
/**
* @Param [code 失败的状态, message 失败的原因]
**/
public static R fail(Integer code, String message) {
R r = new R();
r.setCode(code);
r.setData(null);
r.setMessage(message);
return r;
}
/**
* @Param [code 失败的状态, message 失败的原因]
**/
public static R fail(ResponseEnum responseEnum) {
R r = new R();
r.setCode(responseEnum.getCode());
r.setData(null);
r.setMessage(responseEnum.getMessage());
return r;
}
}
第二步 定义错误枚举
package com.kuangstudy.common;
/**
* @description: 统一返回的常量类
* 对内修改开放,对外修改关闭---枚举
* @author: xuke
* @time: 2021/6/23 22:12
*/
public enum ResponseEnum {
SUCCESS(200,"成功!"),
USER_REG_USER_PASSWORD_CODE(401,"用户名和密码错误"),
USER_REG_USER_PASSWORD_CONFIRM(402,"密码和确认密码不一致"),
ORDER_FAIL(601,"订单失败"),
ORDER_MESSAGE_FAIL(602,"订单发送消息失败") ;
private Integer code;
private String message;
ResponseEnum(Integer code,String mesage){
this.code = code;
this.message =mesage;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}
测试
/**
* @return java.lang.String
* @Author xuke
* @Description 用户注册
* @Date 20:11 2021/6/23
* @Param []
**/
@GetMapping("/reg2")
public R reguser2(Integer flag) {
if (flag.equals(1)) {
return R.fail(ResponseEnum.USER_REG_USER_PASSWORD_CODE);
}
if (flag.equals(2)) {
return R.fail(ResponseEnum.USER_REG_USER_PASSWORD_CONFIRM);
}
// 1: 注册用户 10ms
log.info("新用户注册");
//userService.save(user);
// 2: 发送短信 5s
log.info("发送短信");
regService.sendMsg();
// 3: 添加积分 5s
log.info("添加积分");
regService.addScore();
return R.success("ok");
}