当前位置: 首页 > news >正文

63、SpringBoot---定制 RestTemplate--消息转化器、拦截器

★ 定制RestTemplate

如要对RestTemplate进行自定义设置,Spring Boot也提供了两种主要方式:▲ 局部式:在调用RestTemplateBuilder构建RestTemplate之前,先调用RestTemplateBuilder的方法对其定制,通过这种方式设置的RestTemplateBuilder仅对它构建的RestTemplate起作用。▲ 全局式:使用RestTemplateCustomizer进行定制,所有实现RestTemplateCustomizer接口的Bean会被自动应用到自动配置的RestTemplateBuilder中,这种定制方式对整个应用范围的RestTemplate都起作用。

之前这个就属于局部式定制:
在这里插入图片描述

★ 定制RestTemplate主要在如下两方面进行定制:

▲ 添加或替换拦截器:既可通过 RestTemplateBuilder 的 additionalInterceptors() 或 interceptors() 方法分别添加或替换拦截器。也可直接调用RestTemplate的方法来添加或替换。▲ 添加或替换消息转换器:既可通过 RestTemplateBuilder 的 additionalMessageConverters() 或   messageConverters() 方法分别添加或替换拦截器。也可直接调用RestTemplate的方法来添加或替换。

全局式定制RestTemplate的代码演示

延用–SpringBoot 使用RestTemplate 整合第三方 RESTful 服务–的代码

全局式定制RestTemplate,创建一个 ClientCustomizer 类,实现 RestTemplateCustomizer 接口
在这里插入图片描述
在这里插入图片描述

测试:
可以看出 定制的 RestTemplate 的拦截器生效,开始执行。
在这里插入图片描述

package cn.ljh.app.controller;import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.client.RestTemplateCustomizer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;import java.util.List;//定制 RestTemplate@Slf4j
@Configuration
public class ClientCustomizer implements RestTemplateCustomizer
{@Overridepublic void customize(RestTemplate restTemplate){//在此处即可对容器中自动构建的所有 RestTemplate 进行全局配置//添加HttpMessageConverters消息转换器,先get获取到所有消息转换,然后再用 add 进行添加FastJsonHttpMessageConverter messageConverter = new FastJsonHttpMessageConverter();//该设置说明FastJsonHttpMessageConverter只处理Json格式的数据messageConverter.setSupportedMediaTypes(List.of(MediaType.APPLICATION_JSON));//这样就添加了自定义的定制的消息转换器-----对象和json之间的转换restTemplate.getMessageConverters().add(messageConverter);//替换原有的拦截器//restTemplate.setInterceptors(List.of());//在原有的拦截器的基础上再添加自己的拦截器//此处可以用 Lambda 表达式来创建拦截器restTemplate.getInterceptors().add((request, body, execution) ->{//在这里面自定义拦截器规则log.debug("RestTemplate 的拦截器开始执行");String url = request.getURI().getPath();//设置token半小时内有效int time = (int) (System.currentTimeMillis() / 1000 + 1800);//获取请求方法名String methodName = request.getMethod().name();//获取请求体数据String strBody = new String(body);//此处调用服务器的方法来生成token,生成的token需要哪些参数,取决于服务器String token = generateToken(url, time, methodName, strBody);//设置一个额外的请求头(常常需要再授权时要设置额外的请求头)//具体要添加什么请求头,取决于业务的需要。request.getHeaders().add("X-cn-ljh", token);//继续向下执行return execution.execute(request, body);});}//模拟生成tokenprivate String generateToken(String url, int time, String method, String strBody){return "mycustomtoken";}
}

pom.xml
需要这个fastjson 依赖,用于添加HttpMessageConverters消息转换器
在这里插入图片描述

在这里插入图片描述

相关文章:

63、SpringBoot---定制 RestTemplate--消息转化器、拦截器

★ 定制RestTemplate 如要对RestTemplate进行自定义设置,Spring Boot也提供了两种主要方式:▲ 局部式:在调用RestTemplateBuilder构建RestTemplate之前,先调用RestTemplateBuilder的方法对其定制,通过这种方式设置的R…...

面试系列 - Redis持久化机制详解

目录 一、Redis 持久化机制 二、混合使用 RDB 和 AOF 三、 RDB(Redis DataBase)详解 四、AOF(Append-Only File)详解 Redis 是一个内存数据库,为了持久化数据以确保数据不会在服务器重启时丢失,Redis 提供了两种主要的持久化机…...

Ceph入门到精通-存储集群ceph df 用量统计算法说明

3.2.5. Ceph 如何计算数据使用量 used 值反映了使用的实际原始存储量。xxx GB / xxx GB 代表可用的存储(其中较小的数字)和总存储容量。总容量反映了在复制、克隆或快照前存储数据的大小。因此,实际存储的数据量通常会超过名义上的存储量。这…...

堡垒机的相关介绍

描述 堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审…...

无涯教程-JavaScript - INDIRECT函数

描述 INDIRECT函数返回由文本字符串指定的引用。 如果您在Excel公式中键入引用B1,则Excel会理解这引用了单元格B1。但是,Excel无法将文本字符串" B1"理解为引用。因此,如果单元格引用采用文本字符串的形式,则需要使用INDIRECT函数将其转换为实际的单元格引用。 立…...

LiveNVR监控流媒体Onvif/RTSP功能-支持海康摄像头海康NVR通过EHOME协议ISUP协议接入分发视频流或是转GB28181

LiveNVR支持海康NVR摄像头通EHOME接入ISUP接入LiveNVR分发视频流或是转GB28181 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成功 4、相关…...

一年一度的中秋节马上又要到了,给你的浏览器也来点氛围感吧

说在前面 一年一度的中秋节马上又要到了,给你的浏览器也来点氛围感吧 🌕🌕🌕 插件设计 效果 首先我们应该要先确定一下我们想要实现的效果是怎样的,如上图,我们希望在页面上鼠标点击的时候会在点击区域随…...

CentOS8安装mysql-community-client错误解决

安装MySQL5.7.37的mysql-community-client-5.7.37-1.el7.x86_64.rpm时,提示如下: 提示的意思是缺少依赖软件包。 使用如下命令安装依赖包: yum install libncurse* 实际安装如下两个软件包。 成功后再次安装mysql-community-client-5.7.37…...

故障排除指南:解决 Kibana Discover 加载中的 6 个常见问题

作者:Steffanie Nestor Discover 是 Elastic 的核心 Kibana UI,用于搜索、过滤和检查(时间序列)数据。 可视化用于数据聚合/摘要。 Discover UI 对于大数据 Elasticsearch 响应具有弹性,但有时会因(未压缩的…...

创建一个简单的外卖订餐系统

在今天的快节奏生活中,外卖订餐系统已经成为了人们日常生活中不可或缺的一部分。这些系统通过在线点餐和配送服务,为用户提供了便捷的用餐体验。在本文中,我们将创建一个简单的外卖订餐系统,使用Python和Flask框架构建后端&#x…...

《追逐胜利:编程之路上的三子棋游戏实践》

文章目录 前言一、三子棋游戏规则二、步骤详解1.游戏菜单的实现2.棋盘的实现2.1 初始化棋盘2.2 打印棋盘 3.游戏逻辑实现3.1 玩家下棋3.2 电脑下棋 4.判断输赢4.1 win函数实现 5.完整代码 总结 前言 大家好!我是艾老虎尤!今天我很高兴来和大家分享我最近…...

身份和访问管理解决方案:混合型IAM

对于依赖于本地 IT 基础结构和传统安全模型的组织,可以更轻松地验证和授权企业网络内的所有内容,包括设备、用户、应用程序和服务器。尝试从公司网络外部获取访问权限的用户使用虚拟专用网络 (VPN) 和网络访问控制 (NA…...

微信小程序动态添加表单模块

先来看看效果: 屏幕录制 2023-09-14 16.33.21 点击添加请假按钮,就会新增一个请假信息表单;点击左上角红色删除按钮,删除当前表单; 源码下载地址:https://download.csdn.net/download/xq30397022/88339822…...

HTML5+CSS3小实例:纯CSS实现彩虹倒映水面的唯美背景

实例:纯CSS实现彩虹倒映水面的唯美背景 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" …...

Beautiful Soup简介

BeautifulSoup是一个Python库&#xff0c;用于从HTML或XML文件中提取数据。它提供了一种简单而直观的方式来遍历、搜索和修改HTML或XML文档的结构。 以下是一些BeautifulSoup的主要功能&#xff1a; 解析器&#xff1a;BeautifulSoup支持多种解析器&#xff0c;包括Python的内置…...

Springboot2.7集成websocket及相关问题

1、集成websocket完整代码 导入maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 服务端代码 &#xff08;1&#xff09;注入bean Configur…...

MES管理系统和ERP系统在生产制造管理中的应用

MES生产管理系统通过过程管理、质量管理、设备管理、产品跟踪和溯源、性能分析和物料管理等方面来管理生产制造&#xff0c;旨在建立规范的生产管理信息平台&#xff0c;提高企业核心竞争力。ERP系统则通过制定生产计划、细分物料需求计划、车间订单下达和生产回报等步骤进行生…...

Netty Channel 详解

优质博文&#xff1a;IT-BLOG-CN 一、Netty 服务端启动过程 【1】创建服务端Channel&#xff1b; 【2】初始化服务端Channel&#xff1b; 【3】注册Selector&#xff1b; 【4】端口绑定&#xff1a;我们分析源码的入口从端口绑定开始&#xff0c;ServerBootstrap的bind(int in…...

技师学院物联网实训室建建设方案

一、概述 1.1专业背景 物联网&#xff08;Internet of Things&#xff09;被称为继计算机、互联网之后世界信息产业第三次浪潮&#xff0c;它并非一个全新的技术领域&#xff0c;而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升&#xff0c;是随着传感网、通…...

SpringBoot项目--电脑商城【增加/减少购物车商品数量】

1.持久层[Mapper] 1.1规划需要执行的SQL语句 1.更新该商品的数量.此SQL语句无需重复开发 update t_cart set num?,modified_user?,modified_time? where cid? 2.首先进行查询需要操作的购物车数据信息【查看该条数据是否存在】 SELECT * FROM t_cart WHERE cid?2.接口…...

Linux命令中的mtr命令详解

mtr 是一个功能强大的网络诊断工具&#xff0c;它结合了 ping 和 traceroute 的功能&#xff0c;并提供了实时、持续的连接质量统计数据。它是排查网络问题、定位网络瓶颈的利器。mtr&#xff08;My Traceroute&#xff09;在单个界面中同时展示了数据包从源主机到目标主机所经…...

2026届最火的AI辅助论文网站横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要想把内容被认定成AIGC的可能性给降低&#xff0c;能够采用下面这些策略&#xff1a;第一&a…...

网络钓鱼攻击特征识别与多维度防御技术研究

摘要 网络钓鱼是当前最普遍、危害最突出的网络安全威胁类型&#xff0c;攻击者依托伪造邮件、短信、社交信息与虚假网站&#xff0c;结合社会工程学手段诱导用户泄露敏感数据或执行恶意操作&#xff0c;对个人信息安全与机构运行稳定构成持续威胁。本文以网络钓鱼攻击机理、典型…...

告别重复劳动,用快马平台ai高效生成openclaw自动化脚本

最近在折腾一些文件批量处理的自动化任务&#xff0c;发现OpenClaw这个命令行工具特别适合做这类工作。但每次都要手动敲命令实在太费时间了&#xff0c;特别是需要组合多个命令的时候&#xff0c;调试起来特别麻烦。后来发现了InsCode(快马)平台&#xff0c;用它来编写OpenCla…...

Netty-learning-example数据持久化实战:JPA+MySQL与MyBatis+MongoDB对比

Netty-learning-example数据持久化实战&#xff1a;JPAMySQL与MyBatisMongoDB对比 【免费下载链接】netty-learning-example :egg: Netty实践学习案例&#xff0c;见微知著&#xff01;带着你的心&#xff0c;跟着教程。我相信你行欧。 项目地址: https://gitcode.com/gh_mir…...

为什么H5SC是每个开发者必备的安全工具?终极HTML5安全指南

为什么H5SC是每个开发者必备的安全工具&#xff1f;终极HTML5安全指南 【免费下载链接】H5SC HTML5 Security Cheatsheet - A collection of HTML5 related XSS attack vectors 项目地址: https://gitcode.com/gh_mirrors/h5/H5SC 在当今Web开发领域&#xff0c;HTML5安…...

ModTheSpire开源工具:5大核心策略提升Slay The Spire模组体验

ModTheSpire开源工具&#xff1a;5大核心策略提升Slay The Spire模组体验 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire 一、环境部署与资源配置&#xff1a;从零开始的模组加载器搭建…...

Magisk模块开发实战指南:从基础架构到高级功能实现

Magisk模块开发实战指南&#xff1a;从基础架构到高级功能实现 【免费下载链接】Magisk The Magic Mask for Android 项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk Magisk模块开发是Android系统定制领域的核心技术&#xff0c;它通过独特的挂载机制让开发者…...

为什么高端芯片都爱用Flip Chip?对比Wire Bonding的5大优势详解

为什么高端芯片都爱用Flip Chip&#xff1f;对比Wire Bonding的5大优势详解 在芯片封装领域&#xff0c;Flip Chip&#xff08;倒装芯片&#xff09;技术正逐渐成为高端应用的标配。想象一下&#xff0c;当你手持最新款智能手机&#xff0c;流畅运行着复杂的AI应用时&#xff0…...

Jedi-Vim 终极自定义指南:如何集成其他Python分析工具提升开发效率

Jedi-Vim 终极自定义指南&#xff1a;如何集成其他Python分析工具提升开发效率 【免费下载链接】jedi-vim Using the jedi autocompletion library for VIM. 项目地址: https://gitcode.com/gh_mirrors/je/jedi-vim Jedi-Vim 是一款强大的 Vim 插件&#xff0c;它通过集…...