<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>序列化 on ffff65535</title><link>https://blog.ffff65535.com/tags/%E5%BA%8F%E5%88%97%E5%8C%96/</link><description>Recent content in 序列化 on ffff65535</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 20 May 2022 22:21:21 +0800</lastBuildDate><atom:link href="https://blog.ffff65535.com/tags/%E5%BA%8F%E5%88%97%E5%8C%96/index.xml" rel="self" type="application/rss+xml"/><item><title>Spring cache + Redis LocalDateTime反序列化</title><link>https://blog.ffff65535.com/posts/2022/05/20/spring-cache-redis-localdatetime-serializable/</link><pubDate>Fri, 20 May 2022 22:21:21 +0800</pubDate><guid>https://blog.ffff65535.com/posts/2022/05/20/spring-cache-redis-localdatetime-serializable/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>/**
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* DateTime格式化字符串
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>*/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>private static final String DEFAULT_DATETIME_PATTERN &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;yyyy-MM-dd HH:mm:ss&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/**
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* Date格式化字符串
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>*/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>private static final String DEFAULT_DATE_PATTERN &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;yyyy-MM-dd&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/**
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* Time格式化字符串
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>*/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>private static final String DEFAULT_TIME_PATTERN &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;HH:mm:ss&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>private RedisCacheConfiguration getRedisCacheConfiguration&lt;span style="color:#f92672">()&lt;/span> &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> // 配置序列化（解决乱码的问题）
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> RedisCacheConfiguration config &lt;span style="color:#f92672">=&lt;/span> RedisCacheConfiguration.defaultCacheConfig&lt;span style="color:#f92672">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> //Key序列化方式redisSerializer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .serializeKeysWith&lt;span style="color:#f92672">(&lt;/span>RedisSerializationContext.SerializationPair.fromSerializer&lt;span style="color:#f92672">(&lt;/span>keySerializer&lt;span style="color:#f92672">()))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .serializeValuesWith&lt;span style="color:#f92672">(&lt;/span>RedisSerializationContext.SerializationPair.fromSerializer&lt;span style="color:#f92672">(&lt;/span>valueSerializer&lt;span style="color:#f92672">()))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .disableCachingNullValues&lt;span style="color:#f92672">()&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> config;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/**
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * key 序列化
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> *
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * @return
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> */
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>private RedisSerializer&amp;lt;String&amp;gt; keySerializer&lt;span style="color:#f92672">()&lt;/span> &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> new StringRedisSerializer&lt;span style="color:#f92672">()&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/**
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * 值采用JSON序列化
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> *
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * @return
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> */
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>private RedisSerializer&amp;lt;Object&amp;gt; valueSerializer&lt;span style="color:#f92672">()&lt;/span> &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Jackson2JsonRedisSerializer jackson2JsonRedisSerializer &lt;span style="color:#f92672">=&lt;/span> new Jackson2JsonRedisSerializer&lt;span style="color:#f92672">(&lt;/span>Object.class&lt;span style="color:#f92672">)&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> // 解决查询缓存转换异常的问题
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ObjectMapper om &lt;span style="color:#f92672">=&lt;/span> new ObjectMapper&lt;span style="color:#f92672">()&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> om.setVisibility&lt;span style="color:#f92672">(&lt;/span>PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY&lt;span style="color:#f92672">)&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> om.activateDefaultTyping&lt;span style="color:#f92672">(&lt;/span>new ObjectMapper&lt;span style="color:#f92672">()&lt;/span>.getPolymorphicTypeValidator&lt;span style="color:#f92672">()&lt;/span>, ObjectMapper.DefaultTyping.NON_FINAL&lt;span style="color:#f92672">)&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> jackson2JsonRedisSerializer.setObjectMapper&lt;span style="color:#f92672">(&lt;/span>om&lt;span style="color:#f92672">)&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> // Java8日期日期处理 LocalTime,LocalDate,LocalDateTime
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> JavaTimeModule javaTimeModule &lt;span style="color:#f92672">=&lt;/span> new JavaTimeModule&lt;span style="color:#f92672">()&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> javaTimeModule.addSerializer&lt;span style="color:#f92672">(&lt;/span>LocalDateTime.class, new LocalDateTimeSerializer&lt;span style="color:#f92672">(&lt;/span>DateTimeFormatter.ofPattern&lt;span style="color:#f92672">(&lt;/span>DEFAULT_DATETIME_PATTERN&lt;span style="color:#f92672">)))&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> javaTimeModule.addSerializer&lt;span style="color:#f92672">(&lt;/span>LocalDate.class, new LocalDateSerializer&lt;span style="color:#f92672">(&lt;/span>DateTimeFormatter.ofPattern&lt;span style="color:#f92672">(&lt;/span>DEFAULT_DATE_PATTERN&lt;span style="color:#f92672">)))&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> javaTimeModule.addSerializer&lt;span style="color:#f92672">(&lt;/span>LocalTime.class, new LocalTimeSerializer&lt;span style="color:#f92672">(&lt;/span>DateTimeFormatter.ofPattern&lt;span style="color:#f92672">(&lt;/span>DEFAULT_TIME_PATTERN&lt;span style="color:#f92672">)))&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> javaTimeModule.addDeserializer&lt;span style="color:#f92672">(&lt;/span>LocalDateTime.class, new LocalDateTimeDeserializer&lt;span style="color:#f92672">(&lt;/span>DateTimeFormatter.ofPattern&lt;span style="color:#f92672">(&lt;/span>DEFAULT_DATETIME_PATTERN&lt;span style="color:#f92672">)))&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> javaTimeModule.addDeserializer&lt;span style="color:#f92672">(&lt;/span>LocalDate.class, new LocalDateDeserializer&lt;span style="color:#f92672">(&lt;/span>DateTimeFormatter.ofPattern&lt;span style="color:#f92672">(&lt;/span>DEFAULT_DATE_PATTERN&lt;span style="color:#f92672">)))&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> javaTimeModule.addDeserializer&lt;span style="color:#f92672">(&lt;/span>LocalTime.class, new LocalTimeDeserializer&lt;span style="color:#f92672">(&lt;/span>DateTimeFormatter.ofPattern&lt;span style="color:#f92672">(&lt;/span>DEFAULT_TIME_PATTERN&lt;span style="color:#f92672">)))&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> om.registerModule&lt;span style="color:#f92672">(&lt;/span>javaTimeModule&lt;span style="color:#f92672">)&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> jackson2JsonRedisSerializer.setObjectMapper&lt;span style="color:#f92672">(&lt;/span>om&lt;span style="color:#f92672">)&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> jackson2JsonRedisSerializer;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item></channel></rss>