接着上一篇来说,
不管正常返回结果还是后台出现异常,应该返回给前台统一的响应格式。
所以这一篇就为了应对解决这个问题。
========================================================================
1.首先,定义一个统一返回类【所有返回的格式都是这个类的格式】
packagecom.sxd.sweeping.response;importcom.alibaba.fastjson.JSON;import lombok.*;importjava.io.Serializable;importjava.util.Objects;/*** 统一JSON返回类
*@authorsxd
*@since2018/4/1*/@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructorpublic class GenericResponse implementsSerializable{/*** 程序定义状态码*/
private intcode;/*** 必要的提示信息*/
privateString message;/*** 业务数据*/
privateObject datas;/*** 对业务数据单独处理
*@return
*/@OverridepublicString toString() {if(Objects.isNull(this.datas)){this.setDatas(newObject());
}return JSON.toJSONString(this);
}
}
View Code
2.定义统一返回数据格式【这里定义了一些常用返回code+msg,用于填充上面的统一格式】
packagecom.sxd.sweeping.response;importcom.google.common.collect.Maps;importjava.util.Map;/*** 统一返回客户端数据格式
*@authorsxd
*@since2018/4/1*/
public classResponseFormat {private static Map messageMap =Maps.newHashMap();//初始化状态码与文字说明
static{/*成功状态码*/messageMap.put(200, "成功");/*服务器错误*/messageMap.put(1000,"服务器错误");/*参数错误:10001-19999*/messageMap.put(10001, "参数无效");
messageMap.put(10002, "参数为空");
messageMap.put(10003, "参数类型错误");
messageMap.put(10004, "参数缺失");/*用户错误:20001-29999*/messageMap.put(20001, "用户未登录");
messageMap.put(20002, "账号不存在或密码错误");
messageMap.put(20003, "账号已被禁用");
messageMap.put(20004, "用户不存在");
messageMap.put(20005, "用户已存在");/*业务错误:30001-39999*/messageMap.put(30001, "某业务出现问题");/*系统错误:40001-49999*/messageMap.put(40001, "系统繁忙,请稍后重试");/*数据错误:50001-599999*/messageMap.put(50001, "数据未找到");
messageMap.put(50002, "数据有误");
messageMap.put(50003, "数据已存在");
messageMap.put(50004,"查询出错");/*接口错误:60001-69999*/messageMap.put(60001, "内部系统接口调用异常");
messageMap.put(60002, "外部系统接口调用异常");
messageMap.put(60003, "该接口禁止访问");
messageMap.put(60004, "接口地址无效");
messageMap.put(60005, "接口请求超时");
messageMap.put(60006, "接口负载过高");/*权限错误:70001-79999*/messageMap.put(70001, "无权限访问");
}public staticGenericResponse retParam(Integer status,Object data) {
GenericResponse json= newGenericResponse(status, messageMap.get(status), data);returnjson;
}
}
View Code
3.定义自己的异常类 因为spring 对于 RuntimeException 异常才会进行事务回滚,所以继承的是RuntimeException【可用于代码中自己throw异常】
packagecom.sxd.sweeping.handler;importlombok.Getter;importlombok.Setter;/*** spring 对于 RuntimeException 异常才会进行事务回滚。
*@authorsxd
*@since2018/4/1*/@Getter
@Setterpublic class MyException extendsRuntimeException {publicMyException(Integer code, Exception exception) {this.code =code;this.exception =exception;
}privateInteger code;privateException exception;
}
View Code