首页 > 数据库 >Jackson Redisson反序列化问题

Jackson Redisson反序列化问题

时间:2024-03-12 10:35:42浏览次数:23  
标签:Redisson Jackson ofPattern PATTERN AtomicInteger module new 序列化

异常信息

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `java.util.concurrent.atomic.AtomicInteger` (although at least one Creator exists): no int/Int-argument constructor/factory method to deserialize from Number value (0)

原因

类里面有个 AtomicInteger 类型变量, jackson 找不到改类的通过 Number value 0 的反序列化方法。

解决方案

手动添加一个反序列化配置,

// 以下代码直接在时间序列化 module 里面添加 AtomicInteger 的反序列化配置。
static class AtomicIntegerDeserializer extends JsonDeserializer<AtomicInteger> {

	@Override
	public AtomicInteger deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
		return new AtomicInteger(p.getValueAsInt());
	}
}

@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
	JavaTimeModule module = new JavaTimeModule();
	module.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DATE_PATTERN)));
	module.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(TIME_PATTERN)));
	module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)));
	module.addDeserializer(AtomicInteger.class, new AtomicIntegerDeserializer());
	return builder -> {
		builder.simpleDateFormat(DATE_TIME_PATTERN);
		builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_PATTERN)));
		builder.serializers(new LocalTimeSerializer(DateTimeFormatter.ofPattern(TIME_PATTERN)));
		builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)));
		builder.modules(module);
	};
}

极简生效代码

ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(AtomicInteger.class, new AtomicIntegerDeserializer());
objectMapper.registerModule(module);

标签:Redisson,Jackson,ofPattern,PATTERN,AtomicInteger,module,new,序列化
From: https://www.cnblogs.com/listjiang/p/18067743

相关文章

  • redisson序列化采坑那些事儿
    前言如果对springcloud-gateway有了解的同学,应该会知道springcloud-gateway默认提供了一个基于内存的路由定义仓库。org.springframework.cloud.gateway.route.InMemoryRouteDefinitionRepository基于内存的好处,就是快,但是缺点就是网关重启路由就丢失了。为了方便管理网关路由......
  • php反序列化和redis未授权
    1、centos系统安装http,php,redis服务更新yum源httpphpredis2、使用redis未授权漏洞写入phpinfo3、配合gopher协议ssrf漏洞向服务器写入任意数据4、演示ssh免密码登录5、画图解释PHP反序列化漏洞的原理6、预习一下java反序列化漏洞,包括继承,重写等概念......
  • go 序列化反序列化之后时区信息丢失
     编写了获取当前datetime时间的方法如下//GetCurrentDateString获取当天的时间datefuncGetCurrentDateString()time.Time{//获取当前时间currentTime:=time.Now().Local()//格式化日期为字符串dateString:=currentTime.Format(time.DateTime......
  • php xss 反序列化漏洞
    介绍反序列化漏洞,利用了后端服务的设计缺陷序列化和反序列化对象=(序列化)》字符串对象《(反序列化)=字符串序列化字符串构建首先,理解下对象序列化后是个嘛玩意儿上代码<?phpclasstest{public$a='hello';private$b='hello';protected$c='h......
  • spring-JSON序列化
    1,使用场景。SpringBoot默认json为JackJson。在Controller需要返回Json数据时,我们使用了RestController,如果想对返回的数据进行一定的处理,也就是序列化对象为Json时使用。反序列化,就是当接收的参数想做一定处理,获取到处理后的数据时候。2,JsonSerializer序列化1,自定......
  • Spring反序列化失败 Type definition error: [simple type, class xxx.xxx.xxx]
    也许更好的阅读体验Typedefinitionerror:[simpletype,classcom.elm.po.CommonResult];nestedexceptioniscom.fasterxml.jackson.databind.exc.InvalidDefinitionException:Cannotconstructinstanceofcom.elm.po.CommonResult(noCreators,likedefaultconstru......
  • 【转】[Java]引入Redisson可能会出现项目启动失败问题解决
    转自:https://blog.csdn.net/bengbuguang4321/article/details/121951650在启动项目时,Redisson自己会启动一个Redisson连接池,尝试连接redis,这时候如果遇到网络不通就会出现问题,因为redis连接不上,导致项目启动不了解决方法是:1、重新空实现了一个RedissonClient/***@ClassNa......
  • PHP反序列化漏洞
    0x00何为类和对象说到序列化和反序列化就不得不提到两个词:类和对象那么什么是类,什么是对象教科书式的答案是类是对象的抽象,对象是类的实例那啥叫个抽象,啥叫个实例呢简单的说,类就是对象的一个标准模板,而对象就是按照模板做出来的实物举个栗子人,是一个类所有的人都有一个......
  • 记一次openfeign反序列化异常复盘
    前言之前业务部门有2个通用响应类,一个是负责和前端交互的响应类AjaxResult,一个是负责和后端RPC接口交互的响应类RpcResult。一开始这两个响应类的值字段都一样,形如下 privateBooleansuccess; privateStringmessage; privateIntegercode; privateTdata;因为前端和......
  • C#序列化和反序列化
    在C#编程中,序列化和反序列化是两个核心概念,它们分别代表着将对象状态转换为可以存储或传输的形式(通常是字节流),以及将这种形式的数据恢复为原始对象状态的过程。简单来说,序列化就是将对象转换为流(如文件、网络流等),而反序列化则是将这些流转换回原始对象。为什么要序列化和反序列化......