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

【SpringCloud】OpenFeign配置时间Decode

文章目录

    • 1.自定义反序列化器
    • 2.配置类与自定义 ObjectMapper
    • 客户端

需求:OpenFeign配置自定义decode,解析http请求返回的时间字符串

1.自定义反序列化器

Date 自定义反序列化器

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;public class MultiFormatDateDeserializer extends JsonDeserializer<Date> {private static final List<String> FORMATS = Arrays.asList("yyyy-MM-dd HH:mm:ss","yyyy-MM-dd'T'HH:mm:ss","yyyy-MM-dd","MM/dd/yyyy","dd-MM-yyyy");@Overridepublic Date deserialize(JsonParser parser, DeserializationContext context) throws IOException {String dateString = parser.getText();for (String format : FORMATS) {try {return new SimpleDateFormat(format).parse(dateString);} catch (ParseException ignored) {// 尝试下一个格式}}System.err.println("Unparseable date: " + dateString);throw new IOException("Unparseable date: " + dateString);}
}

LocalDate 自定义反序列化器

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;public class MultiFormatLocalDateDeserializer extends JsonDeserializer<LocalDate> {private static final List<DateTimeFormatter> FORMATTERS = Arrays.asList(DateTimeFormatter.ISO_LOCAL_DATE,           DateTimeFormatter.ofPattern("MM/dd/yyyy"),   DateTimeFormatter.ofPattern("dd-MM-yyyy"),    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")  );@Overridepublic LocalDate deserialize(JsonParser parser, DeserializationContext context) throws IOException {String dateString = parser.getText();for (DateTimeFormatter formatter : FORMATTERS) {try {return LocalDate.parse(dateString, formatter);} catch (Exception ignored) {// 尝试下一个格式}}throw new IOException("Unparseable date: " + dateString);}
}

LocalDateTime 自定义反序列化器

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;public class MultiFormatLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {private static final List<DateTimeFormatter> FORMATTERS = Arrays.asList(DateTimeFormatter.ISO_LOCAL_DATE_TIME,       // yyyy-MM-dd'T'HH:mm:ssDateTimeFormatter.ISO_LOCAL_DATE,            // yyyy-MM-ddDateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm a"), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") );@Overridepublic LocalDateTime deserialize(JsonParser parser, DeserializationContext context) throws IOException {String dateString = parser.getText();for (DateTimeFormatter formatter : FORMATTERS) {try {return LocalDateTime.parse(dateString, formatter);} catch (Exception ignored) {// 尝试下一个格式}}throw new IOException("Unparseable date: " + dateString);}
}

2.配置类与自定义 ObjectMapper

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import feign.Logger;
import feign.codec.Decoder;
import feign.codec.Encoder;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import org.apache.kafka.common.utils.Java;
import org.springframework.context.annotation.Bean;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;/*** <p>** </p>** @author pengapeng* @since 2024-12-13*/
public class CustomFeignConfig {@Beanpublic ObjectMapper customObjectMapper() {ObjectMapper objectMapper = new ObjectMapper();// 注册 Java 时间模块JavaTimeModule javaTimeModule = new JavaTimeModule();// 注册自定义反序列化器javaTimeModule.addDeserializer(LocalDateTime.class, new MultiFormatLocalDateTimeDeserializer());javaTimeModule.addDeserializer(LocalDate.class, new MultiFormatLocalDateDeserializer());javaTimeModule.addDeserializer(Date.class, new MultiFormatDateDeserializer());objectMapper.registerModule(javaTimeModule);return objectMapper;}@Beanpublic Decoder feignDecoder() {ObjectMapper customObjectMapper = customObjectMapper();System.out.println("Using Custom Decoder with ObjectMapper: " + customObjectMapper);return new JacksonDecoder(customObjectMapper);}@Beanpublic Encoder feignEncoder() {ObjectMapper customObjectMapper = customObjectMapper();System.out.println("Using Custom Encoder with ObjectMapper: " + customObjectMapper);return new JacksonEncoder(customObjectMapper);}@BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL;}
}

注意添加feign.jackson的依赖,选择合适的版本,不匹配可能发生错误。

        <dependency><groupId>io.github.openfeign</groupId><artifactId>feign-jackson</artifactId><version>10.4.0</version></dependency>

在这里插入图片描述

客户端

@FeignClient(url = "http://localhost:8088/", name = "test-feign-client",configuration = CustomFeignConfig.class)
public interface TestFeignClient {@GetMapping("/votecms/test/testFeign")TestDO testFeign();
}

测试所用的TestDO类为

@Data
public class TestDO {private String name;private Integer age;private Long id;private Date createTime1;private Date createTime2;private LocalDateTime updateTime;
}

测试时所用版本:SpringBoot 2.3.12.RELEASE、SpringCloud 2.2.1.RELEASE

相关文章:

【SpringCloud】OpenFeign配置时间Decode

文章目录 1.自定义反序列化器2.配置类与自定义 ObjectMapper客户端 需求&#xff1a;OpenFeign配置自定义decode&#xff0c;解析http请求返回的时间字符串 1.自定义反序列化器 Date 自定义反序列化器 import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.j…...

Xerces-C,一个成熟的 C++ XML 解析库!

嗨&#xff0c;大家好&#xff01;我是一行。今天咱们来探索 Xerces-C&#xff0c;它可是 C里超棒的 XML 解析库哦&#xff01;能帮咱轻松处理 XML 数据&#xff0c;在很多数据交互、配置文件读取场景都超实用&#xff0c;快来一起学习使用它的妙招吧。 一、Xerces-C 是什么&am…...

6.2 MapReduce工作原理

MapReduce工作原理涉及将大数据集分割成小块并行处理。Map任务读取数据块并输出中间键值对&#xff0c;而Reduce任务则处理这些排序后的数据以生成最终结果。MapTask工作包括读取数据、应用Map函数、收集输出、内存溢出时写入磁盘以及可选的Combiner局部聚合。ReduceTask工作则…...

一次旧业务系统迁移收缩的经历

单位的一个业务系统&#xff0c;在几年前已经更换了。但旧的系统里面还有很多没有转移过来的数据&#xff0c;虽然普通用户不再需要用旧的系统&#xff0c;但相应部门的管理人员还需要在旧系统查询数据资料&#xff0c;这应该是旧系统向新系统迁移时&#xff0c;数据不彻底&…...

MVC配置文件及位置

配置文件位置 默认位置 WEB-INF目录下&#xff0c;文件名&#xff1a;<servlet-name>-servlet.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.…...

如何解决samba服务器共享文件夹不能粘贴文件

sudo vim /etc/samba/smb.conf在samba的配置文件中增加一个选项 writable yes重启Samba服务以使更改生效&#xff1a; sudo service smbd restart...

【中工开发者】鸿蒙商城app

这学期我学习了鸿蒙&#xff0c;想用鸿蒙做一个鸿蒙商城app&#xff0c;来展示一下。 项目环境搭建&#xff1a; 1.开发环境&#xff1a;DevEco Studio2.开发语言&#xff1a;ArkTS3.运行环境&#xff1a;Harmony NEXT base1 软件要求&#xff1a; DevEco Studio 5.0.0 Rel…...

(九)机器学习 - 多项式回归

多项式回归&#xff08;Polynomial Regression&#xff09;是一种回归分析方法&#xff0c;它将自变量 xx 和因变量 yy 之间的关系建模为 nn 次多项式。多项式回归的目的是找到一个 nn 次多项式函数&#xff0c;使得这个函数能够最好地拟合给定的数据点。 多项式回归的数学表达…...

Qt编写区位码gb2312、机内码、国标码————附带详细介绍和编码实现

文章目录 0 背景1 了解编码1.1 ASCII码1.2 机内码、国标码、区位码1.2.1 区位码1.2.2 国标码&#xff08;GB 2312-80&#xff09;1.2.3 汉字机内码&#xff08;GB 2312&#xff09; 1.3 GBK和GB2312的区别2 编码实现2.1 QString数据转QByteArray类型2.1.1 使用QTextCodec2.1.2 …...

linux网络编程 | c | epoll实现IO多路转接服务器

epoll实现IO多路转接服务器 可通过以下视频学习 06-opell函数实现的多路IO转接_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 文章目录 epoll实现IO多路转接服务器1.思路&功能核心思路 2.代码实现multi_epoll_sever.c运行图 1.思路&功能 **功能&#xff1a;**客…...

Source Insight的使用经验汇总

01-Add All"和“Add Tree”有何区别&#xff1f; 在 Source Insight 中&#xff0c;“Add All”和“Add Tree”是两种向项目&#xff08;Project&#xff09;中添加文件的操作选项&#xff0c;它们的区别在于处理文件和目录的方式不同&#xff1a; 1. Add All 范围&am…...

VSCode 报错:rust-analyzer requires glibc >= 2.28 in latest build

报错信息 /home/jake/.vscode-server-insiders/extensions/matklad.rust-analyzer-0.3.953/server/rust-analyzer: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.29 not found (required by /home/jake/.vscode-server-insiders/extensions/matklad.rust-analyzer-0.3.9…...

Android Link to Death 使用

Java侧&#xff1a; 【android学习】使用linkToDeath对AIDL双向死亡监听_unlinktodeath-CSDN博客 Native侧&#xff1a; Service端 using namespace android; class MyService :public IBinder::DeathRecipient{void MyService::binderDied(const wp<IBinder>& wh…...

【C++游记】string的使用和模拟实现

枫の个人主页 你不能改变过去&#xff0c;但你可以改变未来 算法/C/数据结构/C Hello&#xff0c;这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕&#xff0c;我们继续来学习C的内容呀。C是接近底层有比较经典的语言&#xff0c;因此学习起来注定枯燥无味&#xf…...

DockerUI info存在未授权访问漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

SQL,查询每天最接近指定时间的记录

Oracle 数据库的某表有一列是日期时间类型&#xff0c;每天对应多条数据&#xff1a; td1.1.2024 08:08:0811.1.2024 10:10:1021.1.2024 15:15:1531.1.2024 20:20:2042.1.2024 09:09:0952.1.2024 12:12:1262.1.2024 16:16:16712.12.2024 16:16:168 现在要从每天找出两条记录&…...

ElasticSearch如何做性能优化?

大家好&#xff0c;我是锋哥。今天分享关于【ElasticSearch如何做性能优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; ElasticSearch如何做性能优化&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&#xff0c;性能优化是…...

【Linux】虚拟空间布局模型地址回填数据段合并(万字详解)

Ⅰ、虚拟空间布局模型 理论模型 包括上节的动态库与静态库&#xff0c;加上本节后面两个内容其实都是对gcc的扩展与补充知识&#xff0c;也是需要了解和掌握的知识。在开讲之前&#xff0c;我们先来说一下在32位x86的Linux系统中&#xff0c;虚拟地址空间布局模型&#xff1a…...

const和修饰指针的几种用法

昨天闲着没事去面试了一个C岗位&#xff0c;问了很多基础的东西都没答上来。主要原因是这些知识在硬件资源丰富的pc端用的不多&#xff0c;二来确实很久没温习之前的C相关的知识了。在面试官问了几次类似的问题没有答好的情况下&#xff08;还喜欢问你确不确定&#xff09;&…...

mybatis事务的自动提交与手动提交

MyBatis支持自动提交和手动提交两种事务管理方式。 自动提交事务 MyBatis默认使用自动提交模式&#xff0c;即每个SQL操作都会自动提交到数据库中。这意味着在执行完一条SQL语句后&#xff0c;MyBatis会自动调用commit()方法将更改持久化到数据库。 手动提交事务 可以通过Sq…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...