SpringBoot写后端接口,看这一篇就够了( 五 )
<>(ResultCode.VALIDATE_FAILED, objectError.getDefaultMessage());}这样响应码和响应信息只能是枚举规定的那几个 , 就真正做到了响应数据格式、响应码和响应信息规范化、统一化!这些可以参考:Java项目构建基础:统一结果 , 统一异常 , 统一日志
全局处理响应数据接口返回统一响应体 + 异常也返回统一响应体 , 其实这样已经很好了 , 但还是有可以优化的地方 。 要知道一个项目下来定义的接口搞个几百个太正常不过了 , 要是每一个接口返回数据时都要用响应体来包装一下好像有点麻烦 , 有没有办法省去这个包装过程呢?当然是有滴 , 还是要用到全局处理 。
首先 , 先创建一个类加上注解使其成为全局处理类 。 然后继承ResponseBodyAdvice接口重写其中的方法 , 即可对我们的controller进行增强操作 , 具体看代码和注释:
@RestControllerAdvice(basePackages = {"com.rudecrab.demo.controller"}) // 注意哦 , 这里要加上需要扫描的包public class ResponseControllerAdvice implements ResponseBodyAdvice
重写的这两个方法是用来在controller将数据进行返回前进行增强操作 , supports方法要返回为true才会执行beforeBodyWrite方法 , 所以如果有些情况不需要进行增强操作可以在supports方法里进行判断 。 对返回数据进行真正的操作还是在beforeBodyWrite方法中 , 我们可以直接在该方法里包装数据 , 这样就不需要每个接口都进行数据包装了 , 省去了很多麻烦 。
我们可以现在去掉接口的数据包装来看下效果:
@GetMapping("/getUser")public User getUser() {User user = new User();user.setId(1L);user.setAccount("12345678");user.setPassword("12345678");user.setEmail("123@qq.com");// 注意哦 , 这里是直接返回的User类型 , 并没有用ResultVO进行包装return user;}
然后我们来看下响应数据:
成功对数据进行了包装!
注意:beforeBodyWrite方法里包装数据无法对String类型的数据直接进行强转 , 所以要进行特殊处理 , 这里不讲过多的细节 , 有兴趣可以自行深入了解 。
总结【SpringBoot写后端接口,看这一篇就够了】自此整个后端接口基本体系就构建完毕了
- 通过Validator + 自动抛出异常来完成了方便的参数校验
- 通过全局异常处理 + 自定义异常完成了异常操作的规范
- 通过数据统一响应完成了响应数据的规范
- 多个方面组装非常优雅的完成了后端接口的协调 , 让开发人员有更多的经历注重业务逻辑代码 , 轻松构建后端接口
推荐阅读
- 脑机接口发展失控,人类或将成为变形金刚,马斯克也很无奈
- 375W喂不饱:技嘉给RTX 3080悄悄增加了一个供电接口
- 接口|DP接口不比HDMI差甚至还免费 为何电视厂商不用?
- 阿里达摩院发布2021十大科技趋势,人类有望借脑机接口超越生物学极限
- 不换接口、开放内存超频,11代酷睿平台更厚道了
- 银欣推出MS12金属移动硬盘盒:采用20Gbps USB-C接口
- 计算机专业的同学在掌握了Java之后,还可以学习哪门后端语言
- M.2接口竟然也能装显卡 4K无压力
- 为什么移动硬盘不建议插在台式机前置USB接口上?看完长知识了
- 技嘉发布1TB版Vision Drive移动固态硬盘:采用20Gbps USB-C接口