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

easy-es Map类型字段序列化问题:Unexpected character (‘n‘ (code 110)):

@Data
@IndexName("demo")
public class EasyEsDemo {@IndexIdprivate String id;private String name;private int age;// 这个Map字段因为NameFilter过滤器,导致fastjson序列化后为{null:"value"}这种形式,insert报错private Map<String, Object> data;
}

上面Map类型字段保存报错如下:

Caused by: ElasticsearchException[Elasticsearch exception [type=json_parse_exception, reason=Unexpected character ('n' (code 110)): was expecting double-quote to start field name
.....

此错误主要原因是:EntityInfoHelper中创建的NameFilter是一个匿名类,看上去主要功能就是过滤排除字段,但是针对Map类型字段就出现了问题,导致序列化时候Map的key字段变成了个null. 导致fastjson序列化后为{null:"value"}这种形式,insert报错。

EntityInfoHelper中NameFilter过滤器代码如下:这个过滤器导致序列化Map类型字段时,获取的key当成类的字段属性处理,而类中没有名字为key的字段,所以过滤器过滤完后key变成了null

    /*** 添加fastjson字段过滤器** @param entityInfo 实体信息*/private static void addNameFilter(EntityInfo entityInfo, List<SerializeFilter> preFilters) {Map<String, String> mappingColumnMap = entityInfo.getMappingColumnMap();Map<Class<?>, Map<String, String>> nestedClassMappingColumnMap = entityInfo.getNestedClassMappingColumnMap();if (!mappingColumnMap.isEmpty()) {NameFilter nameFilter = (object, name, value) -> {Map<String, String> nestedMappingColumnMap = nestedClassMappingColumnMap.get(object.getClass());if (Objects.nonNull(nestedMappingColumnMap)) {String nestedMappingColumn = nestedMappingColumnMap.get(name);if (Objects.equals(nestedMappingColumn, name)) {return name;} else {return nestedMappingColumn;}}String mappingColumn = mappingColumnMap.get(name);if (Objects.equals(mappingColumn, name)) {return name;}return mappingColumn;};preFilters.add(nameFilter);}}

不知道是个bug还是不推荐使用Map类型字段。或者说有别的处理方式。目前使用的处理方式如下:自定义一个Map的序列化器,并在Map类型字段增加注解

public static class MyMapSerializer extends MapSerializer {@Overrideprotected String processKey(JSONSerializer jsonBeanDeser, Object object, String key, Object propertyValue) {// 删除了 jsonBeanDeser.nameFilters 的处理逻辑if (this.nameFilters != null) {for (NameFilter nameFilter : this.nameFilters) {key = nameFilter.process(object, key, propertyValue);}}return key;}}// 手动指定自定义的序列化处理器@JSONField(serializeUsing = MyMapSerializer.class)private Map<String, Object> data;

相关文章:

easy-es Map类型字段序列化问题:Unexpected character (‘n‘ (code 110)):

Data IndexName("demo") public class EasyEsDemo {IndexIdprivate String id;private String name;private int age;// 这个Map字段因为NameFilter过滤器&#xff0c;导致fastjson序列化后为{null:"value"}这种形式&#xff0c;insert报错private Map<…...

[Vue3:组件通信)子组件props接收和watch监听,emit发送父组件 (添加修改设置成绩,添加、删除选课记录)

文章目录 一&#xff1a;系统功能&#xff1a;设置成绩&#xff08;添加或修改&#xff09;交互逻辑&#xff1a;涉及页面 Page02.vue&#xff0c;ModalEdit.vue主页面Page.vue注入子页面&#xff0c;使用子页面标签属性主页面对子页面做通信&#xff0c;子页面ModalEdit接收参…...

【网络协议栈】IGMP

IGMP IGMP&#xff08;Internet Group Management Protocol&#xff09;是互联网组管理协议的简称&#xff0c;属于TCP/IP协议族中负责IPv4组播成员管理的协议。以下是关于IGMP的详细介绍&#xff1a; 1 定义与作用 定义&#xff1a;IGMP是多播组成员的一种通信协议&#xf…...

Python机器学习完整流程:从数据清洗到推理落地

目录 一、引言 二、数据清洗 数据加载与初步探索 缺失值处理 异常值处理 特征编码与转换 数据集划分 三、模型训练 四、模型文件生成 五、模型部署与推理落地 六、总结 一、引言 在当今数据驱动的时代&#xff0c;机器学习已成为解决复杂问题的有力工具。而…...

App上架和推广前的准备

众所周知&#xff0c;App推广的第一步是上架各大应用下载市场&#xff0c;然后才是其他推广渠道。所以本文主要分两部分&#xff0c;第一部分主要介绍的是上架各大应用市场方面的准备&#xff0c;第二部分主要介绍的是其他渠道推广方面的准备。 一、App上架前的准备 1.1 上架…...

一季度直播6000场,同比增长60%,遥望科技透露重要信息

6月17日&#xff0c;经由深圳证券交易所许可&#xff0c;遥望科技&#xff08;股票代码&#xff1a;002291&#xff09;正式对《年报问询函》进行公开回复&#xff0c;就经营的多个维度做出解释和回应。 在回复中&#xff0c;遥望科技预测2024年毛利率为14.4%&#xff0c;相比…...

电商API接口是什么意思?有什么作用?

电商API接口是电子商务领域中一种技术解决方案&#xff0c;它允许不同的软件系统之间进行交互和数据交换。 在电商场景下&#xff0c;电商API接口可以实现的功能非常丰富&#xff0c;例如&#xff1a; 商品管理&#xff1a;获取商品列表、商品详情、搜索商品、上下架商品等&a…...

Python爬虫实战案例之——MySql数据入库

Hello大家好&#xff0c;我是你们的南枫学长&#xff0c;咱们今天来学——爬虫之MySql数据入库。 话不多说&#xff0c;导入咱们的老朋友&#xff1a; Pymysql就是我们Python里面的mysql库&#xff0c;主要功能就是用来连接MySql数据库&#xff0c;那么下载还是一样的操作去进…...

游戏中插入音效

一、背景音乐 准备&#xff1a;素材音乐 方法&#xff1a; 1、方法1&#xff1a; (1) 将背景音乐 bgAudio 拖放到Hierarchy面板 (2) 选中 bgAudio&#xff0c;勾选开始运行就播放、循环播放。调节音量&#xff08;volume) 2、方法2&#xff1a; (1) Create Empty&#x…...

Redis缓存设计之常见问题及解决方案

背景&#xff1a;缓存的常见问题及对应的解决方案进行了整理&#xff0c;给大家分享一下。 1.缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储 层查不到数据则不写入缓存层。 缓…...

简单的线程池示例

线程池可以有效地管理和重用线程资源&#xff0c;避免频繁创建和销毁线程带来的开销。以下是一个简单的线程池示例。 cpp #include <iostream> #include <vector> #include <thread> #include <queue> #include <mutex> #include <condition…...

IT入门知识第三部分《软件开发》(3/10)

目录 IT入门知识大纲第三部分《软件开发》 1. 软件开发生命周期&#xff08;SDLC&#xff09; 1.1 需求分析 1.2 软件设计 1.3 程序编码 1.4 软件测试 1.5 项目部署 1.6 运行维护 2. 软件开发方法论 2.1 瀑布模型 2.2 敏捷开发 2.2.1 Scrum 2.2.2 Kanban 2.3 Dev…...

卫星通讯助力船舶可视化监控:EasyCVR视频汇聚系统新应用

一、背景 随着科技的不断进步和社会治安的日益严峻&#xff0c;视频监控系统已经成为维护公共安全和提升管理效率的重要工具。传统的视频监控主要依赖于有线传输&#xff0c;但受到地域限制、布线成本高等因素的影响&#xff0c;其应用范围和效果受到一定限制。而卫星通讯传输…...

gcn+tcn+transformer入侵检测

gcn gcn_out self.gcn(A_hat, D_hat, X) 的公式实际上是图卷积网络&#xff08;GCN&#xff09;层的核心操作。具体来说&#xff0c;这一步的计算基于图卷积的基本公式&#xff1a; H ( l 1 ) σ ( D ^ − 1 / 2 A ^ D ^ − 1 / 2 H ( l ) W ( l ) ) H^{(l1)} \sigma\left…...

【Python】 了解二分类:机器学习中的基础任务

我已经从你的 全世界路过 像一颗流星 划过命运 的天空 很多话忍住了 不能说出口 珍藏在 我的心中 只留下一些回忆 &#x1f3b5; 牛奶咖啡《从你的全世界路过》 在机器学习和数据科学领域&#xff0c;分类问题是最常见的任务之一。分类问题可以分为多类分…...

搭建PHP开发环境:Linux篇

目录 一、引言 二、环境准备 三、安装Web服务器&#xff08;Apache&#xff09; Ubuntu/Debian系统&#xff1a; CentOS/Red Hat系统&#xff1a; 四、安装PHP解释器 Ubuntu/Debian系统&#xff1a; CentOS/Red Hat系统&#xff1a; 五、配置Apache以支持PHP Ubuntu/…...

ROS 自动驾驶多点巡航

ROS 自动驾驶多点巡航&#xff1a; 1、首先创建工作空间&#xff1a; 基于我们的artca_ws&#xff1b; 2、创建功能包&#xff1a; 进入src目录&#xff0c;输入命令: catkin_create_pkg point_pkg std_msgs rospy roscpptest_pkg 为功能包名&#xff0c;后面两个是依赖&a…...

SQL学习,大厂面试真题(1):观看各个视频的平均完播率

各个视频的平均完播率 1、视频信息表 IDAuthorNameCategoryAgeStart Time1张三影视302024-01-01 7:00:002李四美食602024-01-01 7:00:003王麻子旅游902024-01-01 7:00:00 &#xff08;video_id-视频ID, AuthorName-创作者, tag-类别标签, duration-视频时长&#xff08;秒&…...

2023年全国大学生数学建模竞赛C题蔬菜类商品的自动定价与补货决策(含word论文和源代码资源)

文章目录 一、题目二、word版实验报告和源代码&#xff08;两种获取方式&#xff09; 一、题目 2023高教社杯全国大学生数学建模竞赛题目 C题 蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而…...

inpaint下载安装2024-inpaint软件安装包下载v5.0.6官网最新版附加详细安装步骤

Inpaint软件最新版是一款功能强大的图片去水印软件&#xff0c;这款软件拥有强大的智能算法&#xff0c;能够根据照片的背景为用户去除照片中的各种水印&#xff0c;并修补好去除水印后的图片。并且软件操作简单、界面清爽&#xff0c;即使是修图新手也能够轻松上手&#xff0c…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练

本项目提出了ContentV框架&#xff0c;通过三项关键创新高效加速基于DiT的视频生成模型训练&#xff1a; 极简架构设计&#xff0c;最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略&#xff0c;利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...

统计按位或能得到最大值的子集数目

我们先来看题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出 nums 子集 按位或 可能得到的 最大值 &#xff0c;并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素&#xff08;或不删除&#xff09;得到&#xff0c;…...