You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

RedisTemplate使用GenericJackson2JsonRedisSerializer无法正确序列化LocalDate。

当使用RedisTemplate和GenericJackson2JsonRedisSerializer时,对于LocalDate类型的字段,默认情况下无法正确序列化和反序列化。原因是GenericJackson2JsonRedisSerializer使用了Jackson库进行序列化和反序列化操作,而Jackson库对于LocalDate类型的处理存在一些问题。

为了解决这个问题,可以自定义一个RedisTemplate,然后使用自定义的Serializer来处理LocalDate类型的字段。下面是一个示例代码:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import org.springframework.data.redis.serializer.SerializationUtils;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.util.Assert;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class LocalDateRedisTemplate extends RedisTemplate<String, Object> {

    private final ObjectMapper objectMapper;

    public LocalDateRedisTemplate() {
        this.objectMapper = new ObjectMapper();
        this.objectMapper.registerModule(new JavaTimeModule());

        RedisSerializer<String> stringSerializer = new StringRedisSerializer(StandardCharsets.UTF_8);
        RedisSerializer<Object> jsonSerializer = new LocalDateSerializer();

        setKeySerializer(stringSerializer);
        setValueSerializer(jsonSerializer);
        setHashKeySerializer(stringSerializer);
        setHashValueSerializer(jsonSerializer);

        afterPropertiesSet();
    }

    private class LocalDateSerializer implements RedisSerializer<Object> {

        private final Charset charset;

        public LocalDateSerializer() {
            this.charset = Charset.forName("UTF8");
        }

        @Override
        public byte[] serialize(Object object) throws SerializationException {
            if (object == null) {
                return null;
            }

            try {
                String json = objectMapper.writeValueAsString(object);
                return (json == null ? null : json.getBytes(charset));
            } catch (Exception ex) {
                throw new SerializationException("Could not serialize: " + ex.getMessage(), ex);
            }
        }

        @Override
        public Object deserialize(byte[] bytes) throws SerializationException {
            if (bytes == null) {
                return null;
            }

            try {
                String json = new String(bytes, charset);
                return objectMapper.readValue(json, Object.class);
            } catch (Exception ex) {
                throw new SerializationException("Could not deserialize: " + ex.getMessage(), ex);
            }
        }
    }
}

在上述代码中,我们自定义了一个LocalDateRedisTemplate类,继承自RedisTemplate,并重写了构造函数。在构造函数中,我们使用了自定义的LocalDateSerializer来处理LocalDate类型的字段。

然后,我们注册了JavaTimeModule到ObjectMapper中,以支持对LocalDate类型的序列化和反序列化操作。接着,我们分别设置了KeySerializer、ValueSerializer、HashKeySerializer和HashValueSerializer为StringRedisSerializer和LocalDateSerializer。

这样,我们就解决了RedisTemplate使用GenericJackson2JsonRedisSerializer无法正确序列化LocalDate的问题。现在,可以使用该自定义的RedisTemplate来对LocalDate类型的字段进行正确的序列化和反序列化操作。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

干货 | BitSail Connector 开发详解系列一:Source

getSplitSerializer() { return new SimpleBinarySerializer<>(); } /** * Get State serializer for the framework, {@link StateT}should implement from {@link Serializable} */ default Bi... source.type: date.date target.type: date - source.type: string target.type: string```这个文件起到的作用是进行 job 描述 json 文件中`reader`部分的`columns`的解析,对于`columns`中不同字...

干货 | BitSail Connector开发详解系列一:Source

coordinatorContext); /** * Get Split serializer for the framework,{@link SplitT}should implement from {@link Serializable} */ defau... target.type: date - source.type: string target.type: string ``` 这个文件起到的作用是进行job描述json文件中reader部分的columns的解析,对...

Kafka 消息传递详细研究及代码实现|社区征文

// key/value 的序列化类properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); ... public class KafkaTemplateProducer { public void sendTemplate(String topic, Object data){ Map properties = new HashMap<>(); properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CON...

Kubectl 插件开发及开源发布分享 | 社区征文

支持json格式输出。- 最后将其作为krew插件使用。- 可以直接根据名称空间来进行查看对应资源。## 四 开发### 4.1 项目初始化* 安装cobra在开发环境中安装cobra,后去基于改命令行工具来生成项目脚手架,... KubernetesConfigFlags = genericclioptions.NewConfigFlags(true) imageCmd.Flags().BoolP("deployments", "d", false, "show deployments image") imageCmd.Flags().BoolP("daemonsets", "e", false, "show da...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

RedisTemplate使用GenericJackson2JsonRedisSerializer无法正确序列化LocalDate。-优选内容

Flink 使用 Proton
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode;import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper;import org.apache.flink.streaming.... .setValueOnlyDeserializer(new SimpleStringSchema()) .build(); } private static StreamingFileSink createTosSinkFromStaticConfig(String outputPath) { return StreamingFileSink ...
干货 | BitSail Connector 开发详解系列一:Source
getSplitSerializer() { return new SimpleBinarySerializer<>(); } /** * Get State serializer for the framework, {@link StateT}should implement from {@link Serializable} */ default Bi... source.type: date.date target.type: date - source.type: string target.type: string```这个文件起到的作用是进行 job 描述 json 文件中`reader`部分的`columns`的解析,对于`columns`中不同字...
干货 | BitSail Connector开发详解系列一:Source
coordinatorContext); /** * Get Split serializer for the framework,{@link SplitT}should implement from {@link Serializable} */ defau... target.type: date - source.type: string target.type: string ``` 这个文件起到的作用是进行job描述json文件中reader部分的columns的解析,对...
Kafka 消息传递详细研究及代码实现|社区征文
// key/value 的序列化类properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); ... public class KafkaTemplateProducer { public void sendTemplate(String topic, Object data){ Map properties = new HashMap<>(); properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CON...

RedisTemplate使用GenericJackson2JsonRedisSerializer无法正确序列化LocalDate。-相关内容

sonic:基于 JIT 技术的开源全场景高性能 JSON

因此我们对业界现有 Go JSON 库进行了一番评估测试。 首先,根据主流 JSON 库 API,我们将它们的使用方式分为三种:- **泛型(generic)编解码**:JSON 没有对应的 schema,只能依据自描述语义将读取到的 value 解... 是指程序真正开始解析 JSON 数据的时间段。举个例子,如果业务模型中确定了某个JSON key 的值一定是布尔类型,那么我们就可以在序列化阶段直接输出这个对象对应的 JSON 值(‘true’或‘false’),并不需要再检查这个...

使用 vePFS 文件存储静态存储卷

"hostname":"i-host2" }, { "address":"10.244.0.3", "password":"sshpassword", "hostname":"i-host3" }]' > /tmp/vepfs-hots.jsonkubectl create secret generic vepfs-s... 示例文件deployment-nginx-static.yaml代码如下: yaml apiVersion: apps/v1kind: Deploymentmetadata: name: deployment-nginx-staticspec: selector: matchLabels: app: nginx template: metadata:...

计算引擎在K8S上的实践|社区征文

template: metadata: labels: app.kubernetes.io/name: spark-thrift-server-test app.kubernetes.io/version: v3.1.1 spec: serviceAccountName: thrift-server hos... 使用beeline连接beeline -u "jdbc:hive2://localhost:30001/;auth=noSasl" -n hive -p hivespark web ui本地访问http://localhost:30002/jobs/```我这里是一个executor,大家可以基于kubectl edit deploy去修...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

[BitSail] Connector开发详解系列三:SourceReader

consumer.setInstanceName(String.format(SOURCE_READER_INSTANCE_NAME_TEMPLATE, cluster, topic, consumerGroup, UUID.randomUUID())); consumer.setConsumerPullTimeoutMillis(pollTimeout); ... ##### 自定义RowDeserializer类对于不同格式的列应用不同converter,设置到相应Row的Field。````public class ClickhouseRowDeserializer { interface FiledConverter { Object apply(ResultSet resultS...

Kitex v0.9.0 正式发布!

使用方式见 Thrift Streaming Usage。本版本也对 Streaming 请求的监控上报做了改进,同样适用于 gRPC-Protobuf。注意,Thrift 主要用于结构体序列化,并没有使用 Thrift 消息协议。由于 HTTP2 协议的复杂性对... KitexProtobuf 协议支持 JSON 泛化调用**------------------------------------与 Thrift 的 JSON 泛化调用使用方式一样,新版本对 KitexProtobuf 也做了同样的支持。见 JSONPbGeneric。注:需使用 TTH...

通过 Kafka 消费 Canal Proto 格式的订阅数据

serializer;import java.time.Duration;import java.util.Arrays;import java.util.Properties;import static canal.Canal.EntryType.ROWDATA;public class App { private final String topic; private final Properties props; public App(String brokers,String topic,String group, String username, String password) { this.topic = topic; // 配置 sasl 认证 String jaasTemplate = "org.ap...

通过 Kafka 消费火山引擎 Proto 格式的订阅数据

serializer; import java.time.Duration; import java.util.Arrays; import java.util.Properties; public class DTSKafkaConsumerDemo { private final String topic; private final Properties props; public DTSKafkaConsumerDemo(String brokers, String topic, String group, String username, String password) { this.topic = topic; // 配置 sasl 认证 String jaasTemplate = "o...

拉取短信回执

短信服务使用方可通过消息组+密码+拉取的条数,拉取短信回执 接口说明请求方式:POST 接口地址:https://sms.volcpartner.com/generic/receipt 注意事项: 当记录被拉取后,会被记录成已获取状态;再次请求此接口时,会... JSON格式返回,以下仅列出了短信业务逻辑相关的字段,其他公共返回参数详见返回结果。 参数 数据类型 描述 account string 火山引擎账号 sub_account string 消息组ID signature string 签名 template_id string 模板...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询