一、统一返回结果
1、数据格式的的定义
将响应数据封装成json数据返回,一般会将所有接口数据的格式统一,便于前端对数据的分析和操作。返回数据没有固定的格式,只需描述状态码,返回信息,返回数据。
{
"code": 数字, //业务响应码
"message": 字符串, //返回消息
"data": 对象 //返回数据
}
2、响应结果的实现
定义枚举类
创建返回结果的类
私有化code,message
私有化data接收数据用Map键值对的方式响应
防止该类别人对象调用,私有化该类prive R ok(){}
构造函数私有化,不希望外部方法通过构造函数来调用,只能通过自己的定义的静态方法来调用
创建成功、失败和自定义响应的方法
枚举类:解决硬编码问题
@Getter
@ToString
@AllArgsConstructor
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;//消息
;
}
返回结果类
@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 key
* @param value
* @return
*/
public R data(String key,Object value){
this.data.put(key,value);
return this;
}
/**
* 返回值直接是Map集合
* @param map
* @return
*/
public R data(Map<String,Object> map){
this.setData(map);
return this;
}
/**
* 自定义响应结果消息
* @param message
* @return
*/
public R message(String message){
this.setMessage(message);
return this;
}
/**
* 设置特定的响应码
* @param code
* @return
*/
public R code(Integer code){
this.setCode(code);
return this;
}
@Api(tags = "积分等级管理")
@CrossOrigin //跨域处理
@RestController
@RequestMapping("/admin/core/integralGrade")
public class AdminIntegralGradeController {
@Resource
private IntegralGradeService integralGradeService;
@ApiOperation("积分等级列表")
@GetMapping("/list")
public R allList(){
List<IntegralGrade> list = integralGradeService.list();
return R.ok().data("list",list).message("获取列表成功");
}
@ApiOperation(value = "根据id删除数据记录", notes = "逻辑删除")
@DeleteMapping("remove/{id}")
public R removeById(
@ApiParam(value = "数据id",example = "1000",required = true)
@PathVariable Long id){
boolean reslut = integralGradeService.removeById(id);
if (reslut){
return R.ok().message("删除成功");
}else {
return R.error().message("删除失败");
}
}
}
注意在crud的过程中这个啊“,” 号不去掉的时候exacute不成功,api文档会报400