- SpringBoot统一响应体解决方案简介
在SpringBoot应用中,当控制器方法处理完请求后,需要把处理的结果以一定的格式返回给请求方。但是不同的请求可能需要返回不同的格式,比如JSON、XML等等,这就需要我们写很多重复的代码。为了解决这个问题,我们可以使用SpringBoot的统一响应体解决方案。它提供了一个自定义的响应体格式,将所有的响应体都统一起来,减少代码量,提高开发效率。
- 实现SpringBoot统一响应体的步骤
步骤1:添加依赖和配置文件
在Maven或Gradle中添加以下依赖:
<!-- SpringBoot-web依赖包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 处理JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- 统一响应体 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>latest_version</version>
</dependency>
在配置文件中添加以下配置:
# 配置返回值为JSON格式
spring.mvc.converters.preferred-json-mapper=jackson
# 配置FastJSON统一响应体
spring.http.converters.preferred-json-mapper=fastjson
spring.http.converters.fastjson.enabled=true
spring.http.converters.fastjson.features=DisableCircularReferenceDetect
步骤2:建立统一响应体类
在项目中建立一个ResponseResult类作为统一响应体。这个类包含了响应体的状态码、状态信息和数据。代码如下:
/**
* 统一响应体
* @param <T> 数据类型
*/
@Data
public class ResponseResult<T> {
//状态码
private Integer code;
//状态信息
private String msg;
//数据
private T data;
public ResponseResult() {
super();
}
public ResponseResult(Integer code, String msg, T data) {
super();
this.code = code;
this.msg = msg;
this.data = data;
}
}
步骤3:编写自定义异常类
在项目中建立一个自定义异常类,例如BusinessException类。这个类包含了异常状态码和异常信息。代码如下:
/**
* 业务异常类
*/
@Data
public class BusinessException extends RuntimeException {
//异常状态码
private Integer code;
public BusinessException(Integer code, String message) {
super(message);
this.code = code;
}
}
步骤4:编写全局异常处理类
在项目中建立一个全局异常处理类,例如GlobalExceptionHandler类。这个类包含了对所有异常的统一处理。代码如下:
/**
* 全局异常处理类
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 处理所有异常
* @param e 异常
* @return 统一响应体
*/
@ExceptionHandler(Exception.class)
public ResponseResult<Object> handlerException(Exception e) {
return new ResponseResult<Object>(500, e.getMessage(), null);
}
/**
* 处理业务异常
* @param e 异常
* @return 统一响应体
*/
@ExceptionHandler(BusinessException.class)
public ResponseResult<Object> handlerBusinessException(BusinessException e) {
return new ResponseResult<Object>(e.getCode(), e.getMessage(), null);
}
}
步骤5:编写控制器
在项目中编写控制器方法,例如UserController类中的login方法。这个方法需要使用到自定义异常和统一响应体。代码如下:
/**
* 用户控制器
*/
@RestController
@RequestMapping("/user")
public class UserController {
/**
* 用户登录
* @return 统一响应体
*/
@PostMapping("/login")
public ResponseResult<Object> login(String username, String password) {
if (!"admin".equals(username)) {
throw new BusinessException(400, "用户名错误");
}
if (!"123456".equals(password)) {
throw new BusinessException(400, "密码错误");
}
return new ResponseResult<Object>(200, "登录成功", null);
}
}
- SpringBoot统一响应体的使用示例
这里给出两个使用SpringBoot统一响应体的示例。
示例1:使用统一响应体返回成功或失败信息
控制器代码如下:
/**
* 订单控制器
*/
@RestController
@RequestMapping("/order")
public class OrderController {
/**
* 新增订单
* @param order 订单信息
* @return 统一响应体
*/
@PostMapping("/")
public ResponseResult<Object> add(Order order) {
boolean result = orderService.add(order);
if (result) {
return new ResponseResult<Object>(200, "新增成功", null);
} else {
return new ResponseResult<Object>(500, "新增失败", null);
}
}
}
示例2:使用统一响应体返回业务异常信息
控制器代码如下:
/**
* 资源控制器
*/
@RestController
@RequestMapping("/resource")
public class ResourceController {
/**
* 获取资源信息
* @param id 资源ID
* @return 统一响应体
*/
@GetMapping("/{id}")
public ResponseResult<Resource> get(@PathVariable("id") Long id) {
Resource resource = resourceService.get(id);
if (resource == null) {
throw new BusinessException(404, "资源不存在");
}
return new ResponseResult<Resource>(200, "获取成功", resource);
}
}
以上两个示例展示了使用SpringBoot统一响应体的优雅代码,让我们的代码更加简洁、清晰。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SpringBoot统一响应体解决方案 - Python技术站