SpringBoot写后端接口,看这一篇就够了( 五 )

<>(ResultCode.VALIDATE_FAILED, objectError.getDefaultMessage());}这样响应码和响应信息只能是枚举规定的那几个 , 就真正做到了响应数据格式、响应码和响应信息规范化、统一化!这些可以参考:Java项目构建基础:统一结果 , 统一异常 , 统一日志
全局处理响应数据接口返回统一响应体 + 异常也返回统一响应体 , 其实这样已经很好了 , 但还是有可以优化的地方 。 要知道一个项目下来定义的接口搞个几百个太正常不过了 , 要是每一个接口返回数据时都要用响应体来包装一下好像有点麻烦 , 有没有办法省去这个包装过程呢?当然是有滴 , 还是要用到全局处理 。
首先 , 先创建一个类加上注解使其成为全局处理类 。 然后继承ResponseBodyAdvice接口重写其中的方法 , 即可对我们的controller进行增强操作 , 具体看代码和注释:
@RestControllerAdvice(basePackages = {"com.rudecrab.demo.controller"}) // 注意哦 , 这里要加上需要扫描的包public class ResponseControllerAdvice implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter returnType, Class> aClass) {// 如果接口返回的类型本身就是ResultVO那就没有必要进行额外的操作 , 返回falsereturn !returnType.getGenericParameterType().equals(ResultVO.class);}@Overridepublic Object beforeBodyWrite(Object data, MethodParameter returnType, MediaType mediaType, Class> aClass, ServerHttpRequest request, ServerHttpResponse response) {// String类型不能直接包装 , 所以要进行些特别的处理if (returnType.getGenericParameterType().equals(String.class)) {ObjectMapper objectMapper = new ObjectMapper();try {// 将数据包装在ResultVO里后 , 再转换为json字符串响应给前端return objectMapper.writeValueAsString(new ResultVO<>(data));} catch (JsonProcessingException e) {throw new APIException("返回String类型错误");}}// 将原本的数据包装在ResultVO里return new ResultVO<>(data);}}重写的这两个方法是用来在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 + 自动抛出异常来完成了方便的参数校验
  • 通过全局异常处理 + 自定义异常完成了异常操作的规范
  • 通过数据统一响应完成了响应数据的规范
  • 多个方面组装非常优雅的完成了后端接口的协调 , 让开发人员有更多的经历注重业务逻辑代码 , 轻松构建后端接口
关注作者-私信:" Java "免费领取一份学习资料 , 包含(Java学习视频 , 技术文档 , 电子书籍 , 面试题等资料...)还可免费学习Java基础到项目实战课程!


推荐阅读