我的笔记会更新至我的hexo博客,欢迎访问
BDsnake’s Blog
Java(SpringBoot)后端统一结果返回
后端开发过程中,向前端返回的格式应统一确定,所以应当有一个类统一管理返回结果Result(这里用的类是ResultUtil)
下面是构建
首先创建一个Result类
@Data
@AllArgsConstructor
public class Result {
private Integer code;
private String message;
private Object data;
public Result() {
super();
}
}
创建一个常用枚举类,存储自定义的code与message
public enum ResultEnum {
//这里是可以自己定义的
UNKNOWN_ERROR(-1,"未知错误"),
SUCCESS(200,"成功"),
USER_NOT_EXIST(204,"用户不存在"),
USER_IS_EXISTS(203,"用户已存在"),
DATA_IS_NULL(205,"数据为空"),
;
private Integer code;
private String msg;
ResultEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
返回类工具
public class ResultUtil {
/**成功且带数据**/
public static Result success(Object object){
Result result = new Result();
result.setCode(ResultEnum.SUCCESS.getCode());
result.setMsg(ResultEnum.SUCCESS.getMsg());
result.setData(object);
return result;
}
/**成功但不带数据**/
public static Result success(){
return success(null);
}
/**失败**/
public static Result error(ResultEnum resultEnum){
Result result = new Result();
result.setCode(resultEnum.getCode());
result.setMsg(resultEnum.getMsg());
return result;
}
}
- 这里的返回类工具提供了三种方法
- 由于成功的情况应该是经常需要用的,而且返回的code和message基本也是固定的,所以直接写两个方法执行比较省心
- 但是错误是有很多种的,所以就传入一个枚举类,直接从枚举类中获取code和message
以下为三种方法对应的使用演示
@Test
void resTest(){
//懒得写controller了直接输出吧
System.out.println(ResultUtil.success(new String("我是String类型的data")));
System.out.println(ResultUtil.success());
System.out.println(ResultUtil.error(ResultEnum.USER_NOT_EXIST));
}
感觉吧可能有人觉得一会直接调方法一会又得传个枚举类会比较乱,其实以上面这个思路为底子也可以改出自己用着顺手的,看你自己了
来一段我自己使用的例子
@PostMapping("/del")
public Result delUser(String userId){
if (StrUtil.isBlank(userId)) {
return ResultUtil.error(ResultEnum.DATA_IS_NULL);
}
if (articleService.count(Wrappers.<Article>lambdaQuery().eq(Article::getUserId, userId)) > 0) {
return ResultUtil.error(ResultEnum.SHOULD_DEL_ARTICLE_FIRST);
}
if (userService.removeById(userId)) {
return ResultUtil.success();
}
return ResultUtil.error(ResultEnum.UNKNOWN_ERROR);
}