Spring Boot如何实现统一数据返回

 更新时间:2024年07月06日 15:31:25   作者:从零开始的-CodeNinja之路  
这篇文章主要介绍了Spring Boot如何实现统一数据返回,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

统一数据返回

一. 概念

其实统一数据返回是运用了AOP(对某一类事情的集中处理)的思维,简单概括就是在我们进行前后端数据交互的时候,能够让后端的数据进行统一的打包封装,返回给前端,便于前后端的数据处理。

二.实现统一数据返回

其实统一数据返回非常简单,在实现时要加入类注解@ControllerAdvice(这是一个表示控制通知的注解,在接下来的统一异常处理也要运用到),在添加类注解后还要在实现ResponseBodyAdvice接口,然后重写接口的responseAdvice接口和beforeBodyWriter方法即可实现。

  • 添加类注解@ControllerAdvice,实现接口ResponseBodyAdvice
  • 重写responseAdvice方法
  • 重写beforeBodyWriter方法
  • 特殊数据类型特殊处理(String)

2.1 重写responseAdvice方法

responseAdvice方法如下:

@Override
public boolean supports(MethodParameter returnType, Class converterType) {
	return true;
}

可以看到,重写该方法主要返回的是Boolean数据类型,返回false表示不执行统一返回,返回true表示对于所有的数据类型都进行数据统一返回。

supports方法:判断是否要执行beforeBodyWrite方法.true为执行,false不执行.通过该方法可以
选择哪些类或哪些方法的response要进行处理,其他的不进行处理

2.2 重写beforeBodyWriter方法

beforeBodyWriter方法如下:

beforeBodyWrite方法:对response方法进行具体操作处理

其中的参数body最为重要,如果想要对统一后的数据进行格式的转换,直接转换body的格式就行,因为这里的body代指了所有的数据格式。

三. 特殊类型-String的处理

在经过多次不同的数据类型测试后发现,其它类型就可以顺利返回,而String类型却返回不正确。

对于String的数据类型如果想要返回,我们要先引入ObjectMapper,通过调用ObjeceMapper的writeValueAsString()方法来把body的数据格式给转换成Json格式,然后再次进行统一返回即可。

进行数据转换的代码如下:

private static ObjectMapper mapper = new ObjectMapper();
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType, Class selectedConverterType,
 ServerHttpRequestrequest, ServerHttpResponse response) {
	//如果返回结果为String类型, 使⽤SpringBoot内置提供的Jackson来实现信息的序列化
	if (body instanceof String){
		return mapper.writeValueAsString(Result.success(body));
	}
}

四. 全部代码

import com.example.demo.model.Result;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import
org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
@Slf4j
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {
	private static ObjectMapper mapper = new ObjectMapper();
	@Override
	public boolean supports(MethodParameter returnType, Class converterType) {
		return true;
	}
	@SneakyThrows
	@Override
	public Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest
	request, ServerHttpResponse response) {
		//返回结果更加灵活
		if (body instanceof Result){
			return body;
		}
		//如果返回结果为String类型, 使⽤SpringBoot内置提供的Jackson来实现信息的序列化
		if (body instanceof String){
			return mapper.writeValueAsString(Result.success(body));
		}
		return Result.success(body);
	}
}
  • 方便前端程序员更好的接收和解析后端数据接口返回的数据
  • 降低前端程序员和后端程序员的沟通成本,按照某个格式实现就可以了,因为所有接口都是这样返回
    的.
  • 有利于项目统⼀数据的维护和修改.
  • 有利于后端技术部门的统⼀规范的标准制定,不会出现稀奇古怪的返回内容.

相关文章

  • SpringBoot配置数据库密码加密的实现

    SpringBoot配置数据库密码加密的实现

    这篇文章主要介绍了SpringBoot配置数据库密码加密的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Spring之@Qualifier注解的具体使用

    Spring之@Qualifier注解的具体使用

    本文主要介绍了Spring之@Qualifier注解的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Java8新特性Stream流中anyMatch和allMatch和noneMatch的区别解析

    Java8新特性Stream流中anyMatch和allMatch和noneMatch的区别解析

    这篇文章主要介绍了Java8新特性Stream流中anyMatch和allMatch和noneMatch的区别解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • java 跳转搜索的实现示例

    java 跳转搜索的实现示例

    与二分搜索一样,跳转搜索是一种针对排序数组的搜索算法,本文主要介绍了java 跳转搜索的实现示例,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • DWR异常情况处理常见方法解析

    DWR异常情况处理常见方法解析

    这篇文章主要介绍了DWR异常情况处理常见方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Spring 中jdbcTemplate 实现执行多条sql语句示例

    Spring 中jdbcTemplate 实现执行多条sql语句示例

    本篇文章主要介绍了Spring 中jdbcTemplate 实现执行多条sql语句示例,可以对多个表执行多个sql语句,有兴趣的可以了解一下。
    2017-01-01
  • Java几种常用JSON库性能比较详解

    Java几种常用JSON库性能比较详解

    这篇文章主要介绍了Java几种常用JSON库性能比较详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • idea新建Springboot项目,设置默认maven和jdk版本方式

    idea新建Springboot项目,设置默认maven和jdk版本方式

    这篇文章主要介绍了idea新建Springboot项目,设置默认maven和jdk版本方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • springboot开启声明式事务的方法

    springboot开启声明式事务的方法

    本篇文章主要介绍了springboot开启声明式事务的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • springBoot 打war包 程序包com.sun.istack.internal不存在的问题及解决方案

    springBoot 打war包 程序包com.sun.istack.internal不存在的问题及解决方案

    这篇文章主要介绍了springBoot 打war包 程序包com.sun.istack.internal不存在的问题及解决方案,亲测试过可以,需要的朋友可以参考下
    2018-07-07

最新评论