【问题标题】:org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class [Ljava.lang.String;org.bson.codecs.configuration.CodecConfigurationException:找不到类 [Ljava.lang.String; 的编解码器;
【发布时间】:2017-04-07 02:05:08
【问题描述】:

我想运行以下命令来使用 MongoDB Java Driver 创建一个用户,

    client = new MongoClient(mongoClientURI);
    MongoDatabase database = client.getDatabase("db_1");

    Document createUserCommand = new Document();
    createUserCommand.put("createUser", "abc");
    createUserCommand.put("pwd", "abc");
    createUserCommand.put("roles", new String[]{"userAdmin", "read", "readWrite", "dbAdmin", "dbOwner"});         database.runCommand(createUserCommand);

但是发生了以下异常:

Exception in thread "main" org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class [Ljava.lang.String;.
    at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46)
    at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63)
    at org.bson.codecs.configuration.ChildCodecRegistry.get(ChildCodecRegistry.java:51)
    at org.bson.codecs.DocumentCodec.writeValue(DocumentCodec.java:174)
    at org.bson.codecs.DocumentCodec.writeMap(DocumentCodec.java:189)
    at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:131)
    at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:45)
    at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63)

看看roles字段是一个数组导致这个问题,能不能看看这个问题?谢谢

【问题讨论】:

  • 看起来我发现了问题,createUserCommand.put("roles", new String[]{"userAdmin", "read", "readWrite", "dbAdmin", "dbOwner"}) ;数据库.runCommand(createUserCommand);应该是 List 角色 = new ArrayList(); roles.add("userAdmin); ... createUserCommand.put("roles", roles); database.runCommand(createUserCommand); 貌似支持List,不支持Array,真的很丑。
  • 将其发布为答案。它也帮助了我。

标签: mongodb mongodb-java


【解决方案1】:
createUserCommand.put("roles", new String[]{"userAdmin", "read", "readWrite", "dbAdmin", "dbOwner"});
 database.runCommand(createUserCommand); 

应该是

List<String> roles = new ArrayList<String>(); 
roles.add("userAdmin); ... createUserCommand.put("roles", roles); database.runCommand(createUserCommand);

貌似支持List,不支持Array,真的很丑

【讨论】:

  • String[]后查询数据也有这个问题 --> List解决了这个问题
猜你喜欢
  • 2019-06-19
  • 2018-11-01
  • 2019-08-31
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多