SpringBoot写后端接口,看这一篇就够了( 四 )
可以参考我们自定义异常类 , 也来一个响应信息代码code和响应信息说明msg:
@Getterpublic class ResultVO {/*** 状态码 , 比如1000代表响应成功*/private int code;/*** 响应信息 , 用来说明响应情况*/private String msg;/*** 响应的具体数据*/private T data;public ResultVO(T data) {this(1000, "success", data);}public ResultVO(int code, String msg, T data) {this.code = code;this.msg = msg;this.data = http://kandian.youth.cn/index/data;}}
然后我们修改一下全局异常处理那的返回值:
@ExceptionHandler(APIException.class)public ResultVO APIExceptionHandler(APIException e) {// 注意哦 , 这里返回类型是自定义响应体return new ResultVO<>(e.getCode(), "响应失败", e.getMsg());} @ExceptionHandler(MethodArgumentNotValidException.class)public ResultVO MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {ObjectError objectError = e.getBindingResult().getAllErrors().get(0);// 注意哦 , 这里返回类型是自定义响应体return new ResultVO<>(1001, "参数校验失败", objectError.getDefaultMessage());}
我们再来看一下此时如果发生异常了会响应什么数据给前端:
OK , 这个异常信息响应就非常好了 , 状态码和响应说明还有错误提示数据都返给了前端 , 并且是所有异常都会返回相同的格式!异常这里搞定了 , 别忘了我们到接口那也要修改返回类型 , 我们新增一个接口好来看看效果:
@GetMapping("/getUser")public ResultVO
看一下如果响应正确返回的是什么效果:
这样无论是正确响应还是发生异常 , 响应数据的格式都是统一的 , 十分规范!
数据格式是规范了 , 不过响应码code和响应信息msg还没有规范呀!大家发现没有 , 无论是正确响应 , 还是异常响应 , 响应码和响应信息是想怎么设置就怎么设置 , 要是10个开发人员对同一个类型的响应写10个不同的响应码 , 那这个统一响应体的格式规范就毫无意义!所以 , 必须要将响应码和响应信息给规范起来 。
响应码枚举要规范响应体中的响应码和响应信息用枚举简直再恰当不过了 , 我们现在就来创建一个响应码枚举类:
@Getterpublic enum ResultCode {SUCCESS(1000, "操作成功"),FAILED(1001, "响应失败"),VALIDATE_FAILED(1002, "参数校验失败"),ERROR(5000, "未知错误");private int code;private String msg;ResultCode(int code, String msg) {this.code = code;this.msg = msg;} }
然后修改响应体的构造方法 , 让其只准接受响应码枚举来设置响应码和响应信息:
public ResultVO(T data) {this(ResultCode.SUCCESS, data);} public ResultVO(ResultCode resultCode, T data) {this.code = resultCode.getCode();this.msg = resultCode.getMsg();this.data = http://kandian.youth.cn/index/data;}
然后同时修改全局异常处理的响应码设置方式:
@ExceptionHandler(APIException.class)public ResultVO APIExceptionHandler(APIException e) {// 注意哦 , 这里传递的响应码枚举return new ResultVO<>(ResultCode.FAILED, e.getMsg());} @ExceptionHandler(MethodArgumentNotValidException.class)public ResultVO MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {ObjectError objectError = e.getBindingResult().getAllErrors().get(0);// 注意哦 , 这里传递的响应码枚举return new ResultVO
推荐阅读
- 脑机接口发展失控,人类或将成为变形金刚,马斯克也很无奈
- 375W喂不饱:技嘉给RTX 3080悄悄增加了一个供电接口
- 接口|DP接口不比HDMI差甚至还免费 为何电视厂商不用?
- 阿里达摩院发布2021十大科技趋势,人类有望借脑机接口超越生物学极限
- 不换接口、开放内存超频,11代酷睿平台更厚道了
- 银欣推出MS12金属移动硬盘盒:采用20Gbps USB-C接口
- 计算机专业的同学在掌握了Java之后,还可以学习哪门后端语言
- M.2接口竟然也能装显卡 4K无压力
- 为什么移动硬盘不建议插在台式机前置USB接口上?看完长知识了
- 技嘉发布1TB版Vision Drive移动固态硬盘:采用20Gbps USB-C接口