接口统一返回包装类和异常处理
在以SpringBoot开发Restful接口时,统一返回方便前端进行开发和封装,以及出现时给出响应编码和信息,对接口返回内容统一封装。
目录:
1.Constants接口
这个是定义的常量,这里的都是返回到前端的的code,其中200为成功

package com.xxxx.demo.common; public interface Constants { String CODE_200 = "200"; //成功 String CODE_401 = "401"; // 权限不足 String CODE_400 = "400"; // 参数错误 String CODE_500 = "500"; // 系统错误 String CODE_600 = "600"; // 其他业务异常 }
2.Result类
扔到前端响应的统一封装类,其中code等于200的时候为成功,这里定义了几个常见的异常类型,也可以自己按照需求定义

package com.xxxx.demo.common; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * 接口统一返回包装类 */ //返回信息类' @Data @NoArgsConstructor @AllArgsConstructor public class Result { private String code;// private String msg; private Object data;//通用的类型 public static Result success() {//构造方法,成功 return new Result(Constants.CODE_200, "", null); } public static Result success(Object data) {//构造方法,成功 return new Result(Constants.CODE_200, "", data); } public static Result error(String code, String msg) {//构造方法,错误 return new Result(code, msg, null); } public static Result error() {//构造方法,错误 return new Result(Constants.CODE_500, "系统错误", null); } }
这个时候就可以都往前端丢这个Result类型了
例一:
这里在前端收到的信息是一个统一封装类,Result类型,这里的res.code=='200'的时候是成功的,然后这个数据是res.data
例二:
再看看这个然后个人中心的时候按照用户id查询:
然后前端的代码是这样的,数据是res.data,然后判断状态码是'200'的时候是成功的
例三:这个加载页面的时候
然后这个recorde和total就是这样的,例如这个返回的data是一个对象,然后调用里面的东西就是res.data.records和res.data.total
然后后端每一个返回的都是Result,前端每一个都要判断,code=='200'的时候就是正确的,返回正确的就是return Result(调用后端的方法);返回错误就是return Result(错误的code,调用的后端的方法)
这时后台的东西就是这样了:想要数据的话就是.data
3.异常处理和自定义异常
然后这个GlobalExceptionHandler.class

package com.xxxx.demo.exception; import com.xxxx.demo.common.Result; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice public class GlobalExceptionHandler { /** * 如果抛出的的是ServiceException,则调用该方法 * @param se 业务异常 * @return Result */ @ExceptionHandler(ServiceException.class) @ResponseBody public Result handle(ServiceException se){ return Result.error(se.getCode(), se.getMessage()); } }
然后这个ServiceException.class

package com.xxxx.demo.exception; import lombok.Getter; /** * 自定义异常 */ @Getter public class ServiceException extends RuntimeException { private String code; public ServiceException(String code, String msg) { super(msg); this.code = code; } }
然后抛出一个异常的时候就可以这样了
try { one = getOne(queryWrapper); // 从数据库查询用户信息 } catch (Exception e) { LOG.error(e); throw new ServiceException(Constants.CODE_500, "系统错误");//抛出一个异常 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2020-01-19 组合数
2020-01-19 LaunchPad