使用Mongojack写入MongoDB时ObjectId报无效十六进制表示如何解决?
错误原因
- 你在
Guild类的getId、setId方法上添加了@ObjectId注解,该注解的作用是告诉mongojack将该字段序列化为MongoDB原生的ObjectId类型存储。而ObjectId有严格的格式要求:必须是24位的十六进制字符串,你传入的Discord公会ID是18位十进制数字串,完全不符合格式要求,因此抛出转换异常。 - 你的预期是将
_id直接存为普通字符串类型的公会ID,不需要使用MongoDB默认的ObjectId类型,该注解属于多余配置。
解决方案
直接删除Guild类中getId、setId方法上的@ObjectId注解,仅保留@JsonProperty("_id")即可,修改后的代码如下:
@JsonProperty("_id") public String getId() { return id; } @JsonProperty("_id") public void setId(String id) { this.id = id; }
修改后重新运行,写入MongoDB的文档结构就会和你预期的完全一致,不会再触发类型转换错误。
补充说明
你之前尝试将ID转为十六进制的方案无效,是因为MongoDB的ObjectId除了要求是十六进制格式外,还固定为24位长度,你的业务ID本身就不需要适配ObjectId的格式,完全没必要做强制转换。
内容的提问来源于stack exchange,提问作者user11206667
相关产品推荐
相关产品推荐

