我有一个类包含一个可空字段:
public class User {
@BsonId
public ObjectId _id;
// Nullable
public String wechat_unionid;
// Nullable
public String wework_userid;
}
我使用mongodbjava驱动程序的默认POJOCodec,它将忽略null属性,但我需要它为null并存在,否则它将无法通过模式验证。
文件中:https://mongodb.github.io/mongo-java-driver/4.1/bson/pojos/
上面写着:
默认情况下,空值不会被序列化。这由FieldSerialization接口的默认实现控制。可以在ClassModelBuilder中提供的PropertyModelBuilder上设置自定义实现。
但我不知道怎么定制?
我该怎么办?还有别的办法吗?
谢谢!
2条答案
按热度按时间z9ju0rcb1#
我从官方的java驱动程序文档中找到了一个解决方案,它可以成功地工作。这个配置使mongo驱动程序创建字段"年龄",即使"年龄"的值为空。帮助会对你有帮助。
tyg4sfes2#
您可以使用 PropertyModelBuilder 类(可在 ClassModelBuilder 类中使用)控制是否将POJO类的属性序列化为 Document。为所有POJO类获取 ClassModelBuilder 的最简单方法是在POJO CodecRegistry 中声明自定义 Convention。
首先,创建 NullableConvention 类:
然后,将新的 * 约定 * 附加到 PojoCodecProvider 中: