ResponseBodyAdvice 对服务器返回值进行封装

实例讲解Simulink CAN通讯丢失故障判定模型搭建及仿真测试验证方法 本文通过ABS通讯丢失故障触发、判定条件Simulink模型的搭建和仿真的讲解,介绍了一种控制器CAN通讯丢失故障判定的方法和建模方法,希望能给相关技术人员带来一定参考和帮助。 阅读详情

1.实现接口中的方法

 *
 * @author Rossen Stoyanchev
 * @since 4.1
 */
public interface ResponseBodyAdvice<T> {

	/**
	 * Whether this component supports the given controller method return type
	 * and the selected {@code HttpMessageConverter} type.
	 * @param returnType the return type
	 * @param converterType the selected converter type
	 * @return {@code true} if {@link #beforeBodyWrite} should be invoked;
	 * {@code false} otherwise
	 */
	boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType);

	/**
	 * Invoked after an {@code HttpMessageConverter} is selected and just before
	 * its write method is invoked.
	 * @param body the body to be written
	 * @param returnType the return type of the controller method
	 * @param selectedContentType the content type selected through content negotiation
	 * @param selectedConverterType the converter type selected to write to the response
	 * @param request the current request
	 * @param response the current response
	 * @return the body that was passed in or a modified (possibly new) instance
	 */
	@Nullable
	T beforeBodyWrite(@Nullable T body, MethodParameter returnType, MediaType selectedContentType,
			Class<? extends HttpMessageConverter<?>> selectedConverterType,
			ServerHttpRequest request, ServerHttpResponse response);

}

2.方法讲解
supports对你需要进行拦截的response进行判断筛选,返回true则进行拦截反之放行,
beforeBodyWrite对supports进行拦截的response进行处理,封装你需要的类型参数,加密等等。

private static Class<?>[] responseType = { Collection.class, String.class, Integer.class, Date.class };

	@Override
	public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
		if (!returnType.getContainingClass().getPackage().getName().startsWith(ProjectConstant.API_PACKAGE))
			return false;
		for (int i = 0; i < responseType.length; i++) {
			if (responseType[i].isAssignableFrom(returnType.getMethod().getReturnType())
					|| returnType.getMethod().getReturnType().isArray()) {
				return true;
			}
		}
		return false;
	}

	@Override
	public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
			Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
			ServerHttpResponse response) {

		if (Collection.class.isAssignableFrom(returnType.getMethod().getReturnType())
				|| returnType.getMethod().getReturnType().isArray()) {
			// 数组
			if (MediaType.TEXT_HTML.equals(selectedContentType) || MediaType.TEXT_PLAIN.equals(selectedContentType))
				if (!Stream.of(returnType.getMethod().getAnnotations()).anyMatch(a -> {
					if (a instanceof RequestMapping) {
						return !Objs.isEmpty(((RequestMapping) a).produces());
					}
					return false;
				})) {
					response.getHeaders()
							.setContentType(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE));
					return JSONObject.toJSONString(Pages.builder((Collection<?>) body));
				}
			return Pages.builder((Collection<?>) body);
		}

		JSONObject js = new JSONObject();
		js.put(AppEnum.status.getValue(), true);
		js.put(AppEnum.message.getValue(), body);
		if (MediaType.TEXT_HTML.equals(selectedContentType) || MediaType.TEXT_PLAIN.equals(selectedContentType)) {
			if (!Stream.of(returnType.getMethod().getAnnotations()).anyMatch(a -> {
				if (a instanceof RequestMapping) {
					return !Objs.isEmpty(((RequestMapping) a).produces());
				}
				return false;
			}))
				response.getHeaders().setContentType(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE));
			return js.toString();
		}
		return js;
	}
用InVEST做碳中和规划?手把手教你计算城市碳储量与热岛效应 本文详细介绍了如何利用InVEST模型进行城市碳中和规划的科学评估。通过手把手教学,演示了如何使用该模型的碳存储与城市热岛缓解模块,从数据准备、模型运行到结果解读,量化评估不同规划方案下的碳储量变化与热岛效应缓解潜力,为城市规划者提供科学的决策依据。 阅读详情

相关推荐

ROS 2 Jazzy与Gazebo Harmonic仿真实战:从零搭建机器人仿真环境与高级应用

本文详细介绍了如何使用ROS 2 Jazzy和Gazebo Harmonic从零搭建机器人仿真环境,涵盖环境配置、传感器集成、多机器人协同和GPU加速优化等高级应用。通过实战案例和性能调优技巧,帮助开发者高效构建可靠的机器人仿真系统,提升开发效率。

h9j8k7l6m5n的博客 1217

spring mvc 统一返回格式

自己写个方法,实现ResponseBodyAdvice接口,如 import cn.linkengine.pre.service.config.mvc.annotation.ResponseBabyMessage; import cn.linkengine.pre.service.config.mvc.annotation.SimpleResponseBody; import org.spri...

于先森 2316

Proteus下载安装快速入门:30分钟掌握全过程

手把手教你完成proteus下载安装,从环境配置到首次运行一气呵成,适合电子设计新手快速掌握仿真工具的核心操作步骤。

weixin_31974443的博客 891

SpringMVC进阶 - 利用@ControllerAdvice和ResponseBodyAdvice接口统一处理返回值

在我们进行Java的Web应用开发时,如何写更少的代码,做更多的事情。如何让开发更容易上手,更专注于业务层面,不需要太关心底层的实现。这里就分享一些我平时在搭建基础框架时候的一些心得体验。 统一处理返回值 在web应用中,通常前后端会定义一个统一的对象来封装返回值,一般除了业务数据之外,可能会...

chuwengliang4642的博客 799

【雷达信号处理实战】从原理到代码:脉冲多普勒(PD)处理全流程解析与MATLAB仿真

本文深入解析了脉冲多普勒(PD)雷达信号处理的核心原理与全流程。通过剖析多普勒效应、脉冲压缩与慢时间FFT等关键技术,并结合详细的MATLAB仿真代码,手把手指导如何从信号建模、回波模拟到最终生成距离-多普勒谱,实现运动目标的精确测距与测速,直观展示了相参积累带来的显著性能增益。

pca5navigator的博客 953

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码) 文章目录扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)理论讲解KF和EKF模型对比雅可比矩阵计算计算实例应用实例线性模型CV模型:CA模型非线性模型CTRV模型:CTRV实例(python)small demo抛物线demo飞机高度demoC++实例参考文献 我们上篇提到的卡尔曼滤波是用于线性系统,预测(运动)模型和观测模型是在假设高斯和线性情况下进行的。简单的卡尔曼滤波必须应用在符合高斯分布

O_MMMM_O的博客 10万+

SpringBoot validator 完美实现+统一封装错误提示

1、杜绝通篇 if else 参数判断!!! 2、普通参数方式 3、实体对象参数方式 效果 参数不合法,自动使用统一异常返回错误,例如: { "code": "-3", "message": "参数{age}最小18" } 实现代码 代码一次性给全,主要包含如下几个Java类,拿过去拷贝到项目中就能用: 1、ValidatorController 2、ValidatorVo 3、...

小单的博客专栏 2万+

tiny4412用 usb 连接计算机显示sec s5pc210 test b/d 解决方法

当我用USB线连接tiny4412的microUSB端口的时候,出现了驱动没有正常安装,显示“sec s5pc210 test b/d” 出现这种问题的原因有: 1、没有安装到正确的USB驱动; 2、SD卡没有插好 我出现问题的原因属于第二种,插入SD卡后,上电后,LCD屏亮了,但没有任何显示   解决方法是:     更换一张SD卡,重新插入开发板卡槽,上电开

karaskass的博客 3231

实现ResponseBodyAdvice接口进行返回报文封装(脱敏)

今收到需求需要对所有接口的返回报文中含有敏感信息的字段进行加密处理,大概有100多个接口。肯定会优先想到用AOP切面实现。但AOP里头只能用环绕通知去实现,像后置及后置返回通知都是在方法执行后的通知(后置无法收到返回报文,后置返回可收到但是已返回到前端)显然不合适。环绕通知用过的话其实会发现有点性能问题。并且对于它是可以影响原来的返回格式的。所以用一种新的方式去实现,使用ResponseBodyAdvice实现。基本API用法很简单,本文嵌入了一些业务逻辑及设计思路。 需求有7类场景进行脱敏,每个场景不同

weixin_42740540的博客 1491

MSP430FR6043超声波传感器设计记录

1.前言 最近项目设计了一个超声波传感器 参考TI官方的板子EVM430-FR6043搭建的电路 EVM430-FR6043评估模块是一个用于评估MSP430FR6043 MCU性能的开发平台。 MSP430FR6043 MCU是一款超低功耗器件, 集成了超声波感测模拟前端 用于精确地进行超声波测量。 专为超声波水表、热量计和燃气表而设计, MSP430FR6043 器件采用低功耗加速器 (LEA), 可实现基于高速 ADC 的信号采集以及后续优化数字信号处理, 为电池供电型计量提供了一款超低功耗、高

bingdund的博客 2865

【深度学习新浪潮】算力上太空:NVIDIA Space-1 Vera Rubin Module 深度技术解析

NVIDIA Space-1 Vera Rubin Module 不只是一款芯片模组,它是天地一体化 AI 的基础设施底座。它用成熟的 GPU 架构 + 航天级加固,把地面 AI 生态直接平移到太空。下一个 AI 创新战场,不在云端,而在轨道。在轨 LLM星上多模态实时处理卫星自主组网与分布式推理太空算力成为云计算的一级节点参考资料NVIDIA 官方博客:NVIDIA 推出太空计算,将 AI 送入太空轨道GTC 2026 黄仁勋主题演讲。

专注:太空算力、AI infra、异构调度、大模型成本工程 1125

通过ResponseBodyAdvice包装统一返回类型

要求 接口返回真实的业务数据对象,而且还要有统一的返回数据格式。例如,接口是这样的: @GetMapping("/user/{id}") public User user(@PathVariable("id") Integer id){ return userService.getUser(id); } 但是返回的数据格式是这样的 { "code": 1, "msg": "成功", "data": { "id": 1, "username":

Lemcoo的博客 2195

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

@ResponseBody 业务场景使用案例

`@ResponseBody`注解,用于指示方法的返回值应该被直接作为 HTTP 响应的正文(Body)返回,而不是返回一个视图(View)。这在开发 RESTful Web 服务时非常有用。

肖哥弹架构博客 352

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

注解中用于@target的方法annotation/--ElementType.METHOD,ElementType.TYPE对应方法,类接

@Target: @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。 作用:用于描述注解的使用范围(即:被描述的注解...

挨踢小子的博客 2758

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SpringBoot实现ResponseBodyAdvice接口,导致访问swagger异常

文章目录1.问题分析2.解决方案2.1 方案一2.2 方案二2.3. 方案三2.4 其他 1.问题分析 实现ResponseBodyAdvice接口,同时使用RestController,统一后端返回给前端的数据的格式。 /** * @author:ZhangHaiXia * @Date: 2022/3/9 * @Description: Allows customizing the response after the execution of an {@code @ResponseBody} *

weixin_45773632的博客 1389

springboot使用ResponseBodyAdvice导致swagger无法显示的问题

swagger整合问题

lisuo1234的博客 4026

ResponseBodyAdvice 获取参数

controllerAdvice, ResponseBodyAdvice,beforeBodyWrite

黑_桃_K的博客 905

ResponseBodyAdvice 处理json信息

【代码】ResponseBodyAdvice 处理json信息。

qq_44272797的博客 392

Springboot 中 Springdoc(swagger3)和 ResponseBodyAdvice 使用中的问题

Springboot 中 使用ResponseBodyAdvice时,导致 Springdoc(swagger3)报错的问题

OriginalSword的博客 896

Springboot中使用ResponseBodyAdvice对异常,分页等请求进行封装

在java 中,我们常常需要对接口返回的数据进行统一的封装,如调用接口异常的时候,我们不希望直接在后台报错,而是需要给前端或者友好提示是什么异常。又或者在处理分页请求的时候,我们可能需要对数据进行统一的封装(返回总条数,数据集等),对于这个需求,我们可以使用ResponseBodyAdvice 这个接口实现。 以下是几个效果图 1. 2. 3. 4. 5. ResponseBodyAdvice 是 spring 框架中提供的一个接口,其有两个方法,如下: supports :返回参数是一个boolean类

weixin_43389741的博客 1921

ResponseBodyAdvice接口使用导致的报错及解决

ResponseBodyAdvice用于在返回值写入响应之前,将body的内容重新封装,直接上代码。

yx444535180的专栏 2643

Spring boot ResponseBodyAdvice接口全局统一返回控制,Api返回值是String 类型时异常

在大部分前后端分离项目中,后端的返回值基本都需要包装成一个GlobalResponse,其中属性有code、message、data等,来供前端使用。这样就导致大部分Api写完后都需要手动构建一个GlobalResponse对象并填充属性返回,也就造成了大量的重复代码。这类代码其实有很方便的处理方式,就是使用spring提供的responseBodyAdvice接口

Crystalqy的博客 4083

2022-06-07 ResponseBodyAdvice导致Swagger出现弹框问题

由于全局响应统一处理实现ResponseBodyAdvice造成swagger “/swagger-resources/configuration/ui”、“/swagger-resources/configuration/security”、"/swagger-resources"请求,由json格式变成自定义响应体导致无法显示。对全局响应统一处理添加basePackages限制: 参考文章:项目实现ResponseBodyAdvice导致swagger异常......

不爱吃奶昔(zsl0)的博客 834

springboot使用实现ResponseBodyAdvice全局拦截导致swagger无法显示的问题

springboot使用ResponseBodyAdvice全局拦截导致swagger无法显示的问题

wen_ding的博客 407

gateway报错class path resource [org/springframework/web/servlet/mvc/method/annotation/ResponseBodyAdvi

原因: gateway引入了自定义的common包. 里边定义了统一返回值处理方法 @RestControllerAdvice(basePackages = {"com.*"}) // 这里要加上需要扫描的包 public class ResponseControllerAdvice implements ResponseBodyAdvice<Object> { } 因为gateway不能使用web-starter所以报ResponseBodyAdvice找不到这个错误 修改结果 方法1

qq_40104261的博客 7528

ResponseBodyAdvice接口统一响应数据格式。

前一篇分享了一种封装统一响应对象的方法,这一节分享通过实现ResponseBodyAdvice接口来统一响应数据格式。 1.统一响应对象仍然沿用上一篇的(传送器) 2.实现ResponseBodyAdvice接口 3.测试方法 测试返回类型是String类型程序抛出了异常,报的类型转换异常,当返回类型是String时,用的是StringHttpMessageConverter转换器,无法转换...

夏尔 2735
上一篇: java一些utils
下一篇: 关于plsql不安装oracle方案
sunRest
博客等级 码龄9年 7粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值