Java中的MongoDB ObjectId的Base64字符串表示形式?

时间:2012-03-22 17:15:25

标签: java mongodb

使用Java驱动程序,使用Base64编码将ObjectID转换为字符串的最佳方法是什么?

ObjectIds将成为URL的一部分,所以我想稍微缩短它们。

4 个答案:

答案 0 :(得分:2)

ObjectId类具有toString()方法,并且可以在构造函数中提供字符串。但是,这些字符串是base-16(十六进制),并且可能是您正在寻找的。

可在此处找到API信息: http://api.mongodb.org/java/current/

对于base 64编码,我的一位同事建议最好使用toByteArray()方法,并将其转换为base 64字符串。另一方面,ObjectId构造函数可以传递一个字节数组。

Google搜索“java library base64 encoding”会显示另一个Stack Overflow问题,其中包含有关将字节数组转换为基本64字符串并再返回的更多详细信息。
Decode Base64 data in Java

上面的线程包含一个指向base64类的链接,它是Apache Commons Codec的一部分 http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

希望这会让你到达你需要去的地方,或者至少给你一些额外的选择。

答案 1 :(得分:1)

我查看了ObjectId源代码,没有内部字符串ifying方法帮助。

似乎您需要将ObjectId.toByteArray()ObjectId( byte[])与外部Base64编码器/解码器结合使用。 Java Mongo驱动程序曾经有com.mongodb.util.Base64,但它似乎不再是库的一部分,所以我在Apache Commons中使用了Base64 library

以下是在Apache Commons中使用Base64进行转换的示例:

static public ObjectId toObjectId( String stringId)
{
    return new ObjectId( Base64.decodeBase64( stringId));
}

static public String toString( ObjectId objectId)
{
    return Base64.encodeBase64URLSafeString( objectId.toByteArray());
}

答案 2 :(得分:0)

您可以使用URLEncoderURLDecoder代替Base64,它与MongoDB无关,但会将字符串转换为有效的URL字符串。

答案 3 :(得分:0)

使用作为Java的一部分的javax.xml.bind.DatatypeConverter

parseBase64Binary(String lexicalXSDBase64Binary)将base64转换为二进制字符串 printHexBinary(byte [] val)将其打印为十六进制字符串。

这样做的好处是您不会在JavaEE5或Java 6之外添加任何其他库