Java readString只能在CurrentBSONType为STRING时调用,而不能在CurrentBSONType为INT64时调用
读取POJO时发生以下错误,请确保能够成功插入、更新和删除 audid的类型是字符串,大多数读取是正常的 mongo-java-driver-3.8.2.jar 守则的一部分:Java readString只能在CurrentBSONType为STRING时调用,而不能在CurrentBSONType为INT64时调用,java,spring,mongodb,spring-data-mongodb,Java,Spring,Mongodb,Spring Data Mongodb,读取POJO时发生以下错误,请确保能够成功插入、更新和删除 audid的类型是字符串,大多数读取是正常的 mongo-java-driver-3.8.2.jar 守则的一部分: public class TestData implements Serializable { private String audid; } 错误发生在FindItemerable.iterator()中 FindIterable FindIterable=testCollection.find(过滤器,Te
public class TestData implements Serializable {
private String audid;
}
错误发生在FindItemerable.iterator()中
FindIterable FindIterable=testCollection.find(过滤器,TestData.class)
.sort(排序)
.批量大小(1000);
如果(0!=限制){
findItemable.limit(极限);
}
MongoCursor dbCursor=findItemerable.iterator();
错误日志:
org.bson.codecs.configuration.CodecConfigurationException: An exception occurred when decoding using the AutomaticPojoCodec.
Decoding into a 'TestData' failed with the following exception:
Failed to decode 'TestData'. Decoding 'audid' errored with: readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is INT64.
A custom Codec or PojoCodec may need to be explicitly configured and registered to handle this type.
at org.bson.codecs.pojo.AutomaticPojoCodec.decode(AutomaticPojoCodec.java:40)
at com.mongodb.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52)
at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
at org.bson.codecs.configuration.LazyCodec.decode(LazyCodec.java:47)
at org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:101)
at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:63)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
at com.mongodb.internal.connection.ReplyMessage.<init>(ReplyMessage.java:48)
...
Caused by: org.bson.codecs.configuration.CodecConfigurationException: Failed to decode 'TestData'. Decoding 'audid' errored with: readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is INT64.
at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:195)
at org.bson.codecs.pojo.PojoCodecImpl.decodeProperties(PojoCodecImpl.java:173)
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:127)
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:131)
at org.bson.codecs.pojo.AutomaticPojoCodec.decode(AutomaticPojoCodec.java:37)
... 45 common frames omitted
Caused by: org.bson.BsonInvalidOperationException: readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is INT64.
at org.bson.AbstractBsonReader.verifyBSONType(AbstractBsonReader.java:690)
at org.bson.AbstractBsonReader.checkPreconditions(AbstractBsonReader.java:722)
at org.bson.AbstractBsonReader.readString(AbstractBsonReader.java:457)
at org.bson.codecs.StringCodec.decode(StringCodec.java:39)
at org.bson.codecs.StringCodec.decode(StringCodec.java:28)
at org.bson.codecs.DecoderContext.decodeWithChildContext(DecoderContext.java:93)
at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:189)
... 49 common frames omitted
org.bson.codecs.configuration.CodecConfigurationException:使用AutomaticPojoDec进行解码时发生异常。
解码为“TestData”失败,出现以下异常:
未能解码“TestData”。解码“audid”时出错:仅当CurrentBSONType为STRING时才能调用readString,而当CurrentBSONType为INT64时不能调用readString。
可能需要显式配置和注册自定义编解码器或PojoCodec以处理此类型。
位于org.bson.codecs.pojo.AutomaticPojoCodec.decode(AutomaticPojoCodec.java:40)
位于com.mongodb.operation.commandResultaryCodec.decode(commandResultaryCodec.java:52)
位于com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60)
位于org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
位于org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
位于org.bson.codecs.configuration.LazyCodec.decode(LazyCodec.java:47)
位于org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:101)
位于com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:63)
位于org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
位于org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
位于com.mongodb.internal.connection.ReplyMessage(ReplyMessage.java:48)
...
原因:org.bson.codecs.configuration.CodecConfigurationException:未能解码“TestData”。解码“audid”时出错:仅当CurrentBSONType为STRING时才能调用readString,而当CurrentBSONType为INT64时不能调用readString。
位于org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:195)
位于org.bson.codecs.pojo.PojoCodecImpl.decodeProperties(PojoCodecImpl.java:173)
位于org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:127)
位于org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:131)
位于org.bson.codecs.pojo.AutomaticPojoCodec.decode(AutomaticPojoCodec.java:37)
... 省略45个公共框架
原因:org.bson.BsonInvalidOperationException:readString只能在CurrentBSONType为STRING时调用,而不能在CurrentBSONType为INT64时调用。
在org.bson.AbstractBsonReader.verifyBSONType上(AbstractBsonReader.java:690)
在org.bson.AbstractBsonReader.checkPremissions上(AbstractBsonReader.java:722)
位于org.bson.AbstractBsonReader.readString(AbstractBsonReader.java:457)
位于org.bson.codecs.StringCodec.decode(StringCodec.java:39)
位于org.bson.codecs.StringCodec.decode(StringCodec.java:28)
位于org.bson.codecs.DecoderContext.decodecWithChildContext(DecoderContext.java:93)
位于org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:189)
... 省略49个公共框架
请在TestData
类中使用以下代码
@BsonId
private String audid;
public String getAudid(){
return audid;
}
public void setAudid(String audid){
this.audid = audid;
}
另外,在插入数据时,请确保将
audid
作为字符串传递,即在双引号(“”)内。您可以尝试查看字段的数据类型是否不同于文档的字符串-您可以编写mongo shell查询,使用$type
检查值是否为字符串。
@BsonId
private String audid;
public String getAudid(){
return audid;
}
public void setAudid(String audid){
this.audid = audid;
}