点击关注公众号,更多资讯及时推送↓
引言
在 Spring Boot 项目中,统一的数据格式返回是一种常用的手段,它提高了代码的可维护性和一致性,并且改善了客户端和服务端的通信格式统一问题。接下来将介绍如何在 Spring Boot 项目中实现统一的数据格式返回。
一、为什么需要统一数据返回格式
-
⽅便前端程序更好的接收和响应后端接⼝返回的数据。
-
降低了前后端程序员之间的沟通成本,统一按照某个格式接收并响应数据即可,因为所有接⼝都是这样返回的。
-
有利于项目统一数据的修改和维护。
-
有利于项目后端的数据格式统一规范化,避免出现古怪的返回格式和内容。
二、统一数据返回格式的实现
-
@ControllerAdvice是Spring框架提供的一个用于全局处理控制器的增强器注解。通过@ControllerAdvice注解的类,可以将对应的增强逻辑映射到所有的@Controller注解的控制器中。
-
@ResponseBodyAdvice是一个用于处理响应体的接口。通过实现这个接口,可以在Controller方法返回之前和之后对响应体进行处理。
三、话不多说 上代码
1. 创建统一响应类
public class ApiResponse<T> {
private int status;
private String message;
private T data;
public ApiResponse(int status, String message, T data) {
this.status = status;
this.message = message;
this.data = data;
}
// Getters and Setters
}
2 创建统一响应处理类
@ControllerAdvice
public class GlobalResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
// 判断是否需要处理响应体
return true;
}
//方法返回前,会对响应体进行包装,形成统一格式
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
// 包装响应体
if (body instanceof ApiResponse) {
return body;
}
return new ApiResponse<>(HttpStatus.OK.value(), "Success", body);
}
}
@ControllerAdvice //添加完此注解后,此类随着springboot项目的启动而启动,并且会监控controller的异常.监听项目中所有的异常
@ResponseBody
public class MyExceptionAdvice {
//这里的一场都是意外异常,并不是业务异常,业务异常后端controller会处理返回给前端.业务异常会和前端沟通好已规定的状态码返回。
@ExceptionHandler(NullPointerException.class)
public ApiResponse<String> doNullPointerException(NullPointerException e){
ApiResponse<String> apiResponse = new ApiResponse<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage(), null);
return apiResponse;
}
// 默认的异常处理,当有有异常出现的时候,会先匹配子类的异常,当所有的异常都没有匹配的时候就会走这一条默认的一场路线业务。
@ExceptionHandler(Exception.class)
public ApiResponse<String> doException(Exception e){
ApiResponse<String> apiResponse = new ApiResponse<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage(), null);
return apiResponse;
}
}
3、创建 Controller 类测试统一数据格式是否正常
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("login")
public String login(){
Object obj = null;
System.out.println(obj.hashCode());
return "这里是login";
}
@GetMapping("/data")
public User getUserData() {
// 这个方法会返回一个User对象
User user = new User();
user.setId(1);
user.setName("张三");
user.setEmail("zhangsan@example.com");
return user;
}
@GetMapping("/success")
public Integer getSuccessMessage() {
// 这个方法会返回一个简单的字符串
return 123456;
}
}
总结
原文始发于微信公众号(Java技术前沿):SpringBoot实战:Spring Boot 统一数据返回格式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/299589.html