全局消息转换器如何排某些属性

今天使用分页时,发现前端页面,无法正确显示页号,经过debug发现,是传送回前端的Long类型的总记录数被全局的消息转换器转换成了 String 类型,导致出现了bug,本来将 Long 转成String是为了防止前端精度丢失问题,但是分页查询传回前端的 totalRows 总记录数并没有必要进行转换的必要,如何忽略是个问题。

定义的消息转换器 @Bean :

/*** 统一定义Long序列化转String设置(所有的Long序列化成String)* @return*/
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){//构建http信息转换对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();ObjectMapper objectMapper = new ObjectMapper();//反序列化忽略未知属性,不会抛出异常objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);SimpleModule simpleModule = new SimpleModule();//Long | long 序列化StringsimpleModule.addSerializer(Long.class, ToStringSerializer.instance);simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);//注册转化器objectMapper.registerModule(simpleModule);//设置序列化实现converter.setObjectMapper(objectMapper);return converter;
}

该函数的功能是创建并配置一个MappingJackson2HttpMessageConverter对象,用于将Java对象转换为HTTP消息体。主要配置包括:

  1. 创建MappingJackson2HttpMessageConverter实例。
  2. 创建ObjectMapper实例并配置反序列化时忽略未知属性。
  3. 创建SimpleModule实例,并注册Long类型和long类型的序列化转换器,使其在序列化时转换为String类型。
  4. 将上述ObjectMapper实例注册到MappingJackson2HttpMessageConverter中。
  5. 返回配置好的MappingJackson2HttpMessageConverter实例。

第一个想法:

通过创建自定义的混合类(Mix-in)来实现对特定字段的序列化控制。

// 创建一个mix-in类
abstract class MyClassMixIn {@JsonSerialize(using = LongSerializer.class)public abstract long getMyLong();
}// 然后在 ObjectMapper 配置中注册 mix-in 类
objectMapper.addMixIn(PageResult.class, MyClassMixIn.class);

请注意,这里假设存在一个默认处理Long类型的 LongSerializer,实际上Jackson并没有这样的内置序列化器,上述示例仅用于说明如何局部覆盖全局配置。实际应用中可能需要你自己定义一个序列化器或选择其他适当的方式。

第二个想法

让其不会被全局配置影响,将使用默认的Long序列化方式(失败,前端报错500,后端控制台没输出报错)

@ApiModel(description = "分页工具类")
@Data
public class PageResult<T> implements Serializable {/*** 总记录数*/@ApiModelProperty(value = "总记录数", position = 1)@JsonSerialize(using = JsonSerializer.None.class)private Long totalRows;
}

想法3:

字段忽略序列化(失败,传回前段的响应体中,totalRows字段直接消失了)

/*** 分页工具类*/
@ApiModel(description = "分页工具类")
@Data
@JsonIgnoreProperties({"totalRows"})
public class PageResult<T> implements Serializable {/*** 总记录数*/@ApiModelProperty(value = "总记录数", position = 1)private Long totalRows;
}

第四种方法,自定义序列化方式(成功)前端成功收到Long类型的数据

public class DefaultLongSerializer extends JsonSerializer<Long> {@Overridepublic void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {gen.writeNumber(value);}
}
// 在你的类中使用自定义序列化器
@ApiModel(description = "分页工具类")
@Data
public class PageResult<T> implements Serializable {/*** 总记录数*/@ApiModelProperty(value = "总记录数", position = 1)// 这个字段将按照默认方式序列化Long@JsonSerialize(using = DefaultLongSerializer.class)private Long totalRows;
}

如果全局设置已经将所有Long转为String,而你只想让某个字段保持原样,那么可能需要在序列化该特定对象时临时更改或覆盖ObjectMapper的配置,或者在处理该特定字段时采用其他方法,而不是直接通过注解的方式。这通常会涉及到更复杂的逻辑和代码组织结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2834. 找出美丽数组的最小和

2834. 找出美丽数组的最小和 给你两个正整数&#xff1a;n 和 target 。 如果数组 nums 满足下述条件&#xff0c;则称其为 美丽数组 。 nums.length n.nums 由两两互不相同的正整数组成。在范围 [0, n-1] 内&#xff0c;不存在 两个 不同 下标 i 和 j &#xff0c;使得 nu…

一元函数微分学——刷题(26

目录 1.题目&#xff1a;2.解题思路和步骤&#xff1a;3.总结&#xff1a;小结&#xff1a; 1.题目&#xff1a; 2.解题思路和步骤&#xff1a; 归纳求解&#xff0c;把指数写成负数就比较容易看出来规律 3.总结&#xff1a; 归纳求解&#xff0c;把指数写成负数就比较容易…

资产管理系统有哪些(一体化资产管理平台推荐)

企业资产管理系统是一种关键的工具&#xff0c;旨在帮助企业有效地管理和追踪其资产。 该系统利用计算机系统和相关软件&#xff0c;通过信息化、智能化的方式&#xff0c;对资产进行全面的可视化管理&#xff0c;从而提高管理效率、降低运营成本&#xff0c;并确保资产的安全…

Hadoop配置日志的聚集——jobhistory不显示任务问题

问题&#xff1a; 一开始job history是正常的&#xff0c;配置了日志的聚集以后不管做什么任务都不显示任务&#xff0c;hdfs是正常运行&#xff0c;而且根据配置步骤都重启过了。 下面先po出日志聚集的操作步骤&#xff0c;再讲问题 1.配置yarn-site.xml cd $HADOOP_HOME/e…

经典排序算法之快速排序|c++代码实现|什么是快速排序|如何代码实现快速排序

引言 排序算法c实现系列第6弹——快速排序 文章末尾还有本菜已实现的其他排序算法文章的链接。不过&#xff0c;排序算法这个系列还没更完&#xff0c;争取本周末搞完&#xff01;之后还会有堆排序、桶排序等的代码实现&#xff0c;感兴趣的佳人可以点个赞&收藏&#xff…

2024.03.04——2024.03.10 力扣练习总结及专项巩固

1. &#xff08;18. 四数之和&#xff09;已知在一个cpp程序中&#xff0c;使用了"#include<algorithm>"语句&#xff0c;声明引入algorithm头文件。现在假如有一个vector<int>类型的变量nums{-1, 3, 1, -2}&#xff0c;如果仅使用一个语句对其进行排序&…

C++ 信号槽实现sigslot库(不使用QT框架)

SIGSLOT库很简单就一个文件&#xff0c;以下是使用简单的方法&#xff1a; 1、没有参数 signal0<> m_sigSdkInit;信号参数初始化 m_sigSdkInit.connect(this,&类名::SdkLoadingSlot); 信号槽建立连接 m_sigSdkInit.emit();触发方法 2、带一个参数 signal0<int>…

Igraph入门指南 4

二、图的创建 图分有向图和无向图&#xff0c;所以图的创建有各自的实现方式。 1、手工创建图&#xff1a; 1-1 通过文本创建&#xff1a;graph_from_literal 通过每项提供两个顶点名&#xff08;或ID号&#xff09;作为一条边的格式&#xff0c;手动创建图&#xff0c;顶点…

【敬伟ps教程】文字处理工具

文章目录 文字工具使用方式文字图层文字工具选项字符面板段落面板文字工具使用方式 文字工具(快捷键T),包含横排和直排两种类型 创建文本两种类型:点式文本、段落文本 创建文字方式 1、在画面上单击,出现文字光标,可输入文字,然后需要在工具栏中点击“√”或者 Ctrl+…

数学建模-动态规划(美赛运用)

动态规划模型的要素是对问题解决的抽象&#xff0c;其可分为&#xff1a; 阶段。指对问题进行解决的自然划分。例如&#xff1a;在最短线路问题中&#xff0c;每进行走一步的决策就是一个阶段。 状态。指一个阶段开始时的自然状况。例如&#xff1a;在最短线路问题中&#xff…

docker 运行异构镜像

概述 关于docker镜像在不同的cpu架构下运行报错的解决办法&#xff0c;作者踩坑验证&#xff0c;在此分享经验 某次工作遇到需要银行内部部署docker镜像&#xff0c;由于行内已经开始走信创的路线&#xff0c;使用鲲鹏系统&#xff0c;arm架构&#xff0c;记过就遇到了standa…

Linux:安装docker并修改其目录

一、背景 1、通常而言&#xff0c;云服务器的系统盘只有40G&#xff0c;若安装docker后直接运行&#xff0c;则其下载的镜像及容器&#xff0c;均在该系统盘下。 2、当前服务器硬盘背景为&#xff1a;40G系统盘 额外数据盘。 3、需求&#xff1a;将docker运行目录修改至数据盘…

ComfyUI-Flowty-TripoSR

这是一个自定义节点&#xff0c;可让您直接从ComfyUI使用TripoSR。TripoSR 是由 Tripo AI 和 Stability AI 合作开发的最先进的开源模型&#xff0c;用于从单个图像快速前馈 3D 重建。&#xff08;TL;DR 它从图像创建 3d 模型。这篇文章主要介绍了将TripoSR作为ComfyUI节点的配…

华容道问题求解_详细设计(四)之查找算法2_BFS

&#xff08;续上篇&#xff09; 利用BFS查找&#xff0c;会找到最短路径&#xff08;没有权重的图&#xff09;&#xff0c;这个道理比较简单&#xff0c;这是由于寻找路径的方法都是从起点或者接近起点的位置开始的。查找过程如果画出图来&#xff0c;类似于一圈圈的放大&…

【动态规划入门】判断子序列

每日一道算法题之判断子序列 一、题目描述二、思路三、C代码 一、题目描述 题目来源&#xff1a;LeetCode 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位…

HashMap 底层,同时遍历+删除会出现什么问题?怎么解决

HashMap底层使用的是数组链表/红黑树的方式实现的 在并发场景下同时进行遍历删除&#xff0c;会出现ConcurrentModificationException异常&#xff0c;这是因为HashMap的迭代器是快速失败的&#xff08;fail-fast&#xff09;,当检测到结构性的改变&#xff08;比如增加或删除…

java IO实现一次性读取一个文件全部内容后在写入一个文件

java IO实现一次性读取一个文件全部内容后在写入一个文件 import java.io.*;/*** author admin*/ public class FileIo {public static void main(String[] args) {String content getFileString();File outputFile new File("C:\\Users\\admin\\Desktop\\test\\1.txt&…

Kubernetes 几大概念的作用

更详细的组件通信流程 Kubernetes 主要由以下几个核心组件组成&#xff1a; 1. etcd 保存了整个集群的状态&#xff1b; 2. API Server 提供了资源操作的唯一入口&#xff0c;并提供认证&#xff0c;授权&#xff0c;访问控制&#xff0c;API 注册和发现等机制&#xff1b; …

python安装graph-tool 和 torch_geometric,pytorch总结:

目录 1.graph-tool 2.torch_geometric 3.pytorch 1.graph-tool &#xff08;1&#xff09;各种方式试过了&#xff0c;本地安装的没法正常用&#xff1a;conda本地化安装&#xff08;conda install --use-local&#xff09;&#xff0c;以 graph-tool 安装为例 - 知乎 &…

Leetcode每日一题】 二维前缀和 - 矩阵区域和(难度⭐⭐)(31)

1. 题目解析 题目链接&#xff1a;1314. 矩阵区域和 题目乍一看很晦涩难懂&#xff0c;又是大于等于又是k的 仔细分析&#xff0c;题目所说的意思就是以[i,j]为中心&#xff0c;求上下左右向外拓展k个单位的矩阵和&#xff0c;放在名为answer的矩阵中&#xff0c;最后返回ans…