在Spring Boot中使用MongoDB时,默认情况下,MongoDB会将实体类的id属性映射为MongoDB的ObjectId。如果你想保持id属性的原始值,可以通过使用自定义的序列化和反序列化器来实现。
首先,你需要创建一个自定义的ObjectId转换器,用于将ObjectId转换为字符串,并将其注册到Spring Boot的MongoDB配置中。以下是一个示例:
import org.bson.types.ObjectId;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.ReadingConverter;
import org.springframework.data.convert.WritingConverter;
@ReadingConverter
public class ObjectIdToStringConverter implements Converter<ObjectId, String> {
@Override
public String convert(ObjectId objectId) {
return objectId.toString();
}
}
@WritingConverter
public class StringToObjectIdConverter implements Converter<String, ObjectId> {
@Override
public ObjectId convert(String s) {
return new ObjectId(s);
}
}
然后,在你的Spring Boot应用程序中,创建一个配置类,将自定义的转换器添加到MongoDB的转换器列表中:
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.MongoConfigurationSupport;
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class MongoConfig extends MongoConfigurationSupport {
@Override
public MongoCustomConversions customConversions() {
List<Object> converters = new ArrayList<>();
converters.add(new ObjectIdToStringConverter());
converters.add(new StringToObjectIdConverter());
return new MongoCustomConversions(converters);
}
}
现在,当你保存实体类到MongoDB时,id属性将保持原始值,而不是被转换为ObjectId。
这是一个示例实体类的代码:
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "your_collection")
public class YourEntity {
@Id
private String id;
private String name;
// getters and setters
}
这样,你就可以在Spring Boot中使用MongoDB,并保持id属性的原始值不被转换为ObjectId了。
关于腾讯云的相关产品和介绍链接,由于要求不能提及具体的云计算品牌商,建议你访问腾讯云官方网站,查找与MongoDB相关的云服务产品和文档。
领取专属 10元无门槛券
手把手带您无忧上云