You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cassandra转换器:将Null Boolean对象转换为False

Spring Cassandra 2.0.1.RELEASE: 将Null Boolean字段转换为False的解决方案

我来帮你完成这个自定义转换器的实现,让Cassandra中为Null的isPermanant字段自动映射成Java实体里的false值。

先完善你的实体类

首先你的Employee实体需要补充必要的构造方法和getter,不然Spring Data Cassandra没法正常实例化和访问字段:

@Table("employee")
public class Employee implements Serializable {
    private static final long serialVersionUID = -3723276354723269571L;
    @PrimaryKey
    private final String id;
    @Column
    private final Boolean isPermanant;

    // Spring Data Cassandra需要全参构造来实例化对象
    public Employee(String id, Boolean isPermanant) {
        this.id = id;
        this.isPermanant = isPermanant;
    }

    // Getter方法
    public String getId() {
        return id;
    }

    public Boolean getIsPermanant() {
        return isPermanant;
    }
}

编写自定义转换器

我们需要两个转换器:一个处理从数据库读数据到实体(把Null转成false),另一个处理从实体写数据到数据库(可按需调整逻辑)。

核心读取转换器

这个转换器会在Cassandra返回Null时,自动替换成false:

import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.ReadingConverter;

@ReadingConverter
public class NullBooleanToFalseConverter implements Converter<Boolean, Boolean> {

    @Override
    public Boolean convert(Boolean source) {
        // 数据库值为Null时返回false,否则返回原布尔值
        return source != null ? source : false;
    }
}

可选写入转换器

如果你需要把Java里的false转成Null存入数据库,可以修改这个转换器的逻辑,这里先保持默认写入原值:

import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.WritingConverter;

@WritingConverter
public class BooleanToCassandraBooleanConverter implements Converter<Boolean, Boolean> {

    @Override
    public Boolean convert(Boolean source) {
        // 若要将false存为Null,可修改为:return source != null && source ? source : null;
        return source;
    }
}

注册转换器到Spring容器

把这两个转换器配置成CassandraCustomConversions Bean,Spring Data Cassandra就会自动使用它们:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.cassandra.core.convert.CassandraCustomConversions;
import java.util.Arrays;

@Configuration
public class CassandraConfig {

    @Bean
    public CassandraCustomConversions cassandraCustomConversions() {
        return new CassandraCustomConversions(
                Arrays.asList(
                        new NullBooleanToFalseConverter(),
                        new BooleanToCassandraBooleanConverter()
                )
        );
    }
}

关键说明

  • @ReadingConverter:标记这是读取数据库数据到实体时触发的转换器
  • @WritingConverter:标记这是实体数据写入数据库时触发的转换器
  • 配置完成后,查询Employee时,若数据库中isPermanant为Null,实体属性会自动变成false;写入逻辑则完全按照你定义的规则执行。

内容的提问来源于stack exchange,提问作者Patan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:27:37