解决oracle.sql.TIMESTAMP序列化转换失败问题 及 J2EE13Compliant原理
目录
- 报错现象
- 报错内容
- 处理方法
- Oracle驱动源码
- 总结
报错现象
oracle表中存在TIMESTAMP类型的列时,jdbc查出来做序列化时报错
报错内容
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class java.io.ByteArrayInputStream]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.oxye.ResMsg["data"]->com.oxye.base.dto.BaseResponse["columns"]->java.util.ArrayList[0]->java.util.ArrayList[10]->oracle.sql.TIMESTAMP["stream"])
---
Caused by: org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class java.io.ByteArrayInputStream]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.oxye.ResMsg["data"]->com.oxye.base.dto.BaseResponse["columns"]->java.util.ArrayList[0]->java.util.ArrayList[10]->oracle.sql.TIMESTAMP["stream"])
---
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.oxye.ResMsg["data"]->com.oxye.base.dto.BaseResponse["columns"]->java.util.ArrayList[0]->java.util.ArrayList[10]->oracle.sql.TIMESTAMP["stream"])
处理方法
任选其一,目的就是设置一个变量:
1.项目启动时设置一行代码 System.setProperty(“oracle.jdbc.J2EE13Compliant”, “true”);
2.jar启动命令增加 -Doracle.jdbc.J2EE13Compliant=true
3.oracle连接串中增加属性oracle.jdbc.J2EE13Compliant=true
Oracle驱动源码
版本
<dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><version>21.9.0.0</version></dependency>
oracle.jdbc.driver.GeneratedPhysicalConnection类有属性j2ee13Compliant,可以看到
readConnectionProperties中会从多处寻找属性oracle.jdbc.J2EE13Compliant,找不到默认是false
/***/
abstract class GeneratedPhysicalConnection extends OracleConnection {boolean j2ee13Compliant;/***/protected void readConnectionProperties(String var1, @Blind(PropertiesBlinder.class) Properties var2, @Blind(PropertiesBlinder.class) Properties var3) throws SQLException {/***/var4 = null;if (var2 != null) {var4 = var2.getProperty("oracle.jdbc.J2EE13Compliant");}if (var4 == null) {var4 = getSystemProperty("oracle.jdbc.J2EE13Compliant", (String)null);}if (var4 == null && var3 != null) {var4 = var3.getProperty("oracle.jdbc.J2EE13Compliant");}if (var4 == null) {var4 = "false";}this.j2ee13Compliant = var4 != null && var4.equalsIgnoreCase("true");/***/
oracle.jdbc.driver.TimestampAccessor的getObject方法中,会根据属性j2ee13Compliant选择获取时间的方式
/***/
class TimestampAccessor extends DateTimeCommonAccessor {/***/Object getObject(int var1) throws SQLException {if (!this.isUseLess && !this.isNull(var1)) {if (this.externalType == 0) {return this.statement.connection.j2ee13Compliant ? this.getTimestamp(var1) : this.getTIMESTAMP(var1);} else {switch (this.externalType) {case 93:return this.getTimestamp(var1);default:throw (SQLException)((SQLException)DatabaseError.createSqlException(this.getConnectionDuringExceptionHandling(), 4).fillInStackTrace());}}} else {return null;}}/***/
oracle.jdbc.driver.DateTimeCommonAccessor有两个方法getTimestamp和getTIMESTAMP,j2ee13Compliant为true时用getTimestamp获得java.sql.Timestamp,false获取oracle.sql.TIMESTAMP
/***/
import java.sql.Timestamp;
/***/
import oracle.sql.TIMESTAMP;
/***/
abstract class DateTimeCommonAccessor extends Accessor {/***/Timestamp getTimestamp(int var1) throws SQLException {return this.getTimestamp(var1, (Calendar)null);}/***/TIMESTAMP getTIMESTAMP(int var1) throws SQLException {return this.isNull(var1) ? null : new TIMESTAMP(this.getBytesInternal(var1));}/***/
总结
通过设置属性oracle.jdbc.J2EE13Compliant=true,可以时oracle的timestamp以oracle.sql.TIMESTAMP类型返回,不设置时默认false,返回oracle.sql.TIMESTAMP,可能会导致序列化时类型转换失败等问题
相关文章:
解决oracle.sql.TIMESTAMP序列化转换失败问题 及 J2EE13Compliant原理
目录 报错现象报错内容处理方法Oracle驱动源码总结 报错现象 oracle表中存在TIMESTAMP类型的列时,jdbc查出来做序列化时报错 报错内容 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframewo…...
QQ2023备份
需要修改的路径(共3处) 这三处路径中,只有一处是需要修改的 QQPC端-主菜单-设置-基本设置-文件管理 点击上面的“”自定义“”,然后修改路径即可 修改路径后提示 然后等一会才会关干净QQ的相关进程,关闭后才会有自动…...
HNU计算机结构体系-实验2:CPU动态指令调度Tomasulo
文章目录 实验2 CPU动态指令调度Tomasulo一、实验目的二、实验说明三、实验内容问题1:问题2:问题3:问题4:问题5: 四、思考题问题1:问题2: 五、实验总结 实验2 CPU动态指令调度Tomasulo 一、实验…...
智慧城市是什么?为什么要建智慧城市?
智慧城市是一个通过现代科技手段推动城市管理和服务创新的概念。 具体来说,它利用信息技术和创新概念,将城市的各个系统和服务集成起来,以提升城市运行效率、优化城市管理和服务,改善市民的生活质量。 为什么要建智慧城市呢&…...
数据结构线性表-栈和队列的实现
1. 栈(Stack) 1.1 概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 …...
IntelliJ IDEA 的 HTTP 客户端的高级用法
本心、输入输出、结果 文章目录 IntelliJ IDEA 的 HTTP 客户端的高级用法前言HTTP 请求对 gRPC 请求的支持对 GraphQL 和 WebSocket 请求的支持环境文件OpenAPI 补全用于持续集成的 HTTP 客户端 CLI花有重开日,人无再少年实践是检验真理的唯一标准IntelliJ IDEA 的 HTTP 客户端…...
代码随想录算法训练营第四十六天 _ 动态规划_198.打家劫舍、213.打家劫舍II、337.打家劫舍 III。
学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 60天训练营打卡计划! 学习内容: 198.打家劫舍 动态规划五步曲&a…...
ffmpeg编译问题
利用ffmpeg实现一个播放器,ffmpeg提供动态库,但是编译链接的时候遇到下面的问题: ../ffmpegWidgetPlayer/videoplayerwidget.cpp:23: error: undefined reference to sws_freeContext(SwsContext*) ../ffmpegWidgetPlayer/videoplayerwidget.…...
【flink番外篇】1、flink的23种常用算子介绍及详细示例(3)-window、distinct、join等
Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的…...
centos7做gitlab数据灾备项目地址指向问题
如果你在 CentOS 7 上使用 GitLab 时,它回复的数据指向了另一个服务器的地址,可能是因为配置文件中的一些设置不正确。 要解决这个问题,可以尝试以下几个步骤: 检查 GitLab 配置文件:打开 GitLab 的配置文件…...
leetcode:93. 复原 IP 地址
复原 IP 地址 中等 1.4K 相关企业 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但…...
玄子Share-CSS3 弹性布局知识手册
玄子Share-CSS3 弹性布局知识手册 Flexbox Layout(弹性盒布局)是一种在 CSS 中用于设计复杂布局结构的模型。它提供了更加高效、简便的方式来对容器内的子元素进行排列、对齐和分布 主轴和交叉轴 使用弹性布局,最重要的一个概念就是主轴与…...
Nat easy IP ACL
0表示匹配,1表示任意(主机位0.0.0.255(255主机位)) rule deny source 192.168.2.1 0 设置拒绝192.168.2.1的主机通过 记住将其应用到接口上 [AR2]acl 2000 //创建基本ACL [AR2-acl-basic-2000]rule deny source 192…...
Numpy数组的数据类型汇总 (第4讲)
Numpy数组的数据类型 (第4讲) 🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…...
通讯app:
为了开发一个即时通讯的app,包含发送文字、语音、视频以及视频通话的功能,我们需要考虑以下的技术栈和实现步骤: 技术栈建议: 前端:React Native 或 Flutter 用于跨平台移动应用开发。后端:ThinkPHP Wor…...
【Backbone】TransNeXt:最新ViT模型(原理+常用神经网络汇总)
文章目录 一、近几年神经网络 Backbone 回顾1.Densenet 与 Resnet2.CBP3.SENet4.GCNet5.DANet6.PANet 与 FPN7.ASPP8.SPP-net9.PSP-net10.ECA-Net 二、TransNeXt(2023)1.提出问题2.Aggregated Pixel-focused Attention2.1 Pixel-focused Attention&#…...
使用Java将图片添加到Excel的几种方式
1、超链接 使用POI,依赖如下 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>Java代码如下,运行该程序它会在桌面创建ImageLinks.xlsx文件。 …...
用什么台灯对眼睛最好?考公护眼台灯推荐
之前我一直觉得,孩子近视,是因为玩手机太多,看电子产品的时间过长,但后来控制孩子看电子产品时间的触底反弹与越来越深的度数告诉我,孩子近视的真正原因,我根本没有找到,后来看到一篇报告&#…...
【嵌入式开发 Linux 常用命令系列 4.2 -- .repo 各个目录介绍】
文章目录 概述.repo 目录结构manifests/default.xmlManifest 文件的作用default.xml 文件内容示例linkfile 介绍 .repo/projects 子目录配置和管理configHEADhooksinfo/excludeobjectsrr-cache 工作区中的对应目录 概述 repo 是一个由 Google 开发的版本控制工具,它…...
【C++学习手札】基于红黑树封装模拟实现map和set
🎬慕斯主页:修仙—别有洞天 💜本文前置知识: 红黑树 ♈️今日夜电波:漂流—菅原纱由理 2:55━━━━━━️💟──────── 4:29 …...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
