创建统一返回结果类
@Data
public class Result implements Serializable {
private Boolean success;
private Integer code;
private String msg;
private Object data;
// 构造器私有
private Result(){}
// 通用返回成功
public static Result ok() {
Result r = new Result();
r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
r.setCode(ResultCodeEnum.SUCCESS.getCode());
r.setMsg(ResultCodeEnum.SUCCESS.getMessage());
return r;
}
// 通用返回失败,未知错误
public static Result error() {
Result r = new Result();
r.setSuccess(ResultCodeEnum.UNKNOWN_ERROR.getSuccess());
r.setCode(ResultCodeEnum.UNKNOWN_ERROR.getCode());
r.setMsg(ResultCodeEnum.UNKNOWN_ERROR.getMessage());
return r;
}
// 设置结果,形参为结果枚举
public static Result setResult(ResultCodeEnum result) {
Result r = new Result();
r.setSuccess(result.getSuccess());
r.setCode(result.getCode());
r.setMsg(result.getMessage());
return r;
}
/**------------使用链式编程,返回类本身-----------**/
// 自定义返回数据
public Result data(Object o) {
this.setData(o);
return this;
}
// 自定义状态信息
public Result message(String message) {
this.setMsg(message);
return this;
}
// 自定义状态码
public Result code(Integer code) {
this.setCode(code);
return this;
}
// 自定义返回结果
public Result success(Boolean success) {
this.setSuccess(success);
return this;
}
//返回json
public Object toJSON(){
return JSONObject.toJSON(this);
}
}
创建结果状态枚举类
/**
* 统一结果返回标志
*/
@Getter
public enum ResultCodeEnum {
SUCCESS(true,200,"成功"),
UNKNOWN_ERROR(false,500,"内部错误,请联系管理员"),
PARAM_ERROR(false,501,"参数错误");
// 响应是否成功
private Boolean success;
// 响应状态码
private Integer code;
// 响应信息
private String message;
ResultCodeEnum(boolean success, Integer code, String message) {
this.success = success;
this.code = code;
this.message = message;
}
}
使用ControllerAdvice注解
具体异常可继续添加
@ControllerAdvice
public class RestCtrlExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Result handleException(Exception e){
return Result.error().code(500).message(e.getMessage()+",内部异常,请联系管理员");
}
}
然后controller层返回结果的时候不用在写tryCatch了 ,返回结果的时候也用Result封装一下,起码这样返回给其他平台调用的时候格式统一,但凡服务出问题也不至于把本地的异常抛给下游
示例返回
return Result.ok().data(array_data);