✨✨个人主页:沫洺的主页
📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏
📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏
📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏
💖💖如果文章对你有所帮助请留下三连✨✨
🍰统一返回格式
在做后端应用的时候,前后端分离的情况下,我们经常会定义一个数据格式,通常会包含code,message,data这三个必不可少的信息来方便前后端的交流
需要增加的依赖
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.5</version> </dependency>
实体类dto/ResponseDto
package com.moming.dto; import lombok.Data; @Data public class ResponseDto { private int code; private String message; private Object data; }
做统一返回值的业务逻辑
创建增强类advice/MyResponseAdvice
@RestControllerAdvice(basePackages = "com.moming.controller") public class MyResponseAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { ResponseDto responseDto = new ResponseDto(); responseDto.setCode(0); responseDto.setMessage(""); responseDto.setData(body); //处理返回类型为字符串 if (selectedConverterType == StringHttpMessageConverter.class) { //hutool JSONUtil.toJsonStr字符串转换为json数据 return JSONUtil.toJsonStr(responseDto); } else { return responseDto; } } }
创建接口进行测试
@RestController @RequestMapping("/api/user") public class UserController { @GetMapping("/test1") public UserDto test1(){ return UserDto.builder().id(1).name("张三").build(); } @GetMapping("/test2") public String test2(){ return "字符串"; } }
统一异常处理返回格式
@RestControllerAdvice(basePackages = "com.moming.controller") public class MyResponseAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { return true; } @ExceptionHandler public Object processException(Exception ex){ ResponseDto responseDto = new ResponseDto(); responseDto.setCode(1); responseDto.setMessage(ex.getMessage()); return responseDto; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { ResponseDto responseDto = new ResponseDto(); responseDto.setCode(0); responseDto.setMessage(""); responseDto.setData(body); //处理返回类型为字符串 if (selectedConverterType == StringHttpMessageConverter.class) { //hutool JSONUtil.toJsonStr字符串转换为json数据 return JSONUtil.toJsonStr(responseDto); } else { return responseDto; } } }
接口模拟异常
@RestController @RequestMapping("/api/user") public class UserController { @GetMapping("/test1") public UserDto test1(){ return UserDto.builder().id(1).name("张三").build(); } @GetMapping("/test2") public String test2()throws Exception{ if(true)throw new Exception("接口异常"); return "字符串"; } }
测试