【发布时间】:2021-08-08 04:08:15
【问题描述】:
我正在使用 Spring Boot webflux 和 spring data 响应式 mongodb。
我有一个用@Document 注释的用户类,它实现了UserDetails。问题是我有一个带有@Indexed(unique = true) 的username 字段。当应用程序启动时,即使索引是在数据库上创建的,它也会抛出以下错误。
以下是课程:
public abstract class GenericEntity<Tid> {
abstract public Tid getId();
}
@Data
@Document(collection = "users")
@FieldDefaults(level = AccessLevel.PROTECTED)
@NoArgsConstructor
@AllArgsConstructor
public abstract class User extends GenericEntity<String> implements UserDetails {
@Id
String id;
@Size(max = 63)
@NotBlank(message = "First name is missing")
String firstName;
@Size(max = 63)
@NotBlank(message = "Last name is missing")
String lastName;
@NotBlank
@Size(min = 5, max = 40)
@Email(message = "Invalid email address")
@Indexed(unique = true)
String username;
@NotBlank
@Size(min = 8, max = 255)
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
String password;
@NotNull
Boolean enabled = true;
@NotEmpty
List<Role> roles;
}
@Data
@Document(collection = "users")
@TypeAlias(value = "com.abcd.photograph.Photograph")
public class Photograph extends User {
@NotNull
Date birthDate;
}
错误:
2021-05-18 23:26:24.139 INFO 12613 --- [ restartedMain] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8080
2021-05-18 23:26:24.164 INFO 12613 --- [ restartedMain] com.assurance.BackApplication : Started BackApplication in 3.885 seconds (JVM running for 4.409)
2021-05-18 23:26:24.182 ERROR 12613 --- [ntLoopGroup-3-7] o.s.d.m.core.ReactiveMongoTemplate : Unexpected exception during asynchronous execution
org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 2 (BadValue): 'failed to add collation information to index spec for index creation: { key: { username: 1 }, name: "username", unique: true, collation: { locale: "users" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: "users" }' on server ******:27017. The full response is {"operationTime": {"$timestamp": {"t": 1621373184, "i": 8}}, "ok": 0.0, "errmsg": "failed to add collation information to index spec for index creation: { key: { username: 1 }, name: \"username\", unique: true, collation: { locale: \"users\" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: \"users\" }", "code": 2, "codeName": "BadValue", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1621373184, "i": 9}}, "signature": {"hash": {"$binary": {"base64": "*****", "subType": "00"}}, "keyId": *****}}}; nested exception is com.mongodb.MongoCommandException: Command failed with error 2 (BadValue): 'failed to add collation information to index spec for index creation: { key: { username: 1 }, name: "username", unique: true, collation: { locale: "users" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: "users" }' on server ******:27017. The full response is {"operationTime": {"$timestamp": {"t": 1621373184, "i": 8}}, "ok": 0.0, "errmsg": "failed to add collation information to index spec for index creation: { key: { username: 1 }, name: \"username\", unique: true, collation: { locale: \"users\" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: \"users\" }", "code": 2, "codeName": "BadValue", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1621373184, "i": 9}}, "signature": {"hash": {"$binary": {"base64": "*****", "subType": "00"}}, "keyId": *****}}}
at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:133) ~[spring-data-mongodb-3.1.3.jar:3.1.3]
at org.springframework.data.mongodb.core.ReactiveMongoTemplate.potentiallyConvertRuntimeException(ReactiveMongoTemplate.java:2819) ~[spring-data-mongodb-3.1.3.jar:3.1.3]
at org.springframework.data.mongodb.core.ReactiveMongoTemplate.lambda$translateException$91(ReactiveMongoTemplate.java:2802) ~[spring-data-mongodb-3.1.3.jar:3.1.3]
at reactor.core.publisher.Flux.lambda$onErrorMap$27(Flux.java:6597) ~[reactor-core-3.4.2.jar:3.4.2]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) ~[reactor-core-3.4.2.jar:3.4.2]
at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onError(MonoFlatMapMany.java:255) ~[reactor-core-3.4.2.jar:3.4.2]
at com.mongodb.reactivestreams.client.internal.AbstractSubscription.onError(AbstractSubscription.java:142) ~[mongodb-driver-reactivestreams-4.1.1.jar:na]
at com.mongodb.reactivestreams.client.internal.SingleResultCallbackSubscription.lambda$requestInitialData$0(SingleResultCallbackSubscription.java:41) ~[mongodb-driver-reactivestreams-4.1.1.jar:na]
at com.mongodb.internal.async.client.AsyncMongoCollectionImpl.lambda$createIndex$6(AsyncMongoCollectionImpl.java:872) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.async.client.AsyncMongoCollectionImpl.lambda$executeCreateIndexes$8(AsyncMongoCollectionImpl.java:925) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.async.client.OperationExecutorImpl$2$1$1.onResult(OperationExecutorImpl.java:135) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.operation.OperationHelper$ReferenceCountedReleasingWrappedCallback.onResult(OperationHelper.java:531) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.operation.CreateIndexesOperation$2$1$1.onResult(CreateIndexesOperation.java:229) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.operation.CreateIndexesOperation$2$1$1.onResult(CreateIndexesOperation.java:226) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.operation.CommandOperationHelper$11.onResult(CommandOperationHelper.java:654) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor$2.onResult(DefaultServer.java:285) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.CommandProtocolImpl$1.onResult(CommandProtocolImpl.java:82) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection$2.onResult(DefaultConnectionPool.java:530) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.UsageTrackingInternalConnection$2.onResult(UsageTrackingInternalConnection.java:142) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:465) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:440) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:745) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:712) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:582) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:579) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:255) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:214) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.readAsync(InternalStreamConnection.java:579) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.access$1100(InternalStreamConnection.java:78) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:702) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:687) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:582) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:579) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:255) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:214) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.connection.netty.NettyStream.handleReadResponse(NettyStream.java:285) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.connection.netty.NettyStream.access$800(NettyStream.java:69) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:344) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:341) ~[mongodb-driver-core-4.1.1.jar:na]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1533) ~[netty-handler-4.1.58.Final.jar:4.1.58.Final]
at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1282) ~[netty-handler-4.1.58.Final.jar:4.1.58.Final]
at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1329) ~[netty-handler-4.1.58.Final.jar:4.1.58.Final]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:508) ~[netty-codec-4.1.58.Final.jar:4.1.58.Final]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:447) ~[netty-codec-4.1.58.Final.jar:4.1.58.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) ~[netty-codec-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.58.Final.jar:4.1.58.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.58.Final.jar:4.1.58.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.58.Final.jar:4.1.58.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.58.Final.jar:4.1.58.Final]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: com.mongodb.MongoCommandException: Command failed with error 2 (BadValue): 'failed to add collation information to index spec for index creation: { key: { username: 1 }, name: "username", unique: true, collation: { locale: "users" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: "users" }' on server ******:27017. The full response is {"operationTime": {"$timestamp": {"t": 1621373184, "i": 8}}, "ok": 0.0, "errmsg": "failed to add collation information to index spec for index creation: { key: { username: 1 }, name: \"username\", unique: true, collation: { locale: \"users\" }, v: 2 } :: caused by :: Field 'locale' is invalid in: { locale: \"users\" }", "code": 2, "codeName": "BadValue", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1621373184, "i": 9}}, "signature": {"hash": {"$binary": {"base64": "*****", "subType": "00"}}, "keyId": *****}}}
at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:175) ~[mongodb-driver-core-4.1.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:454) ~[mongodb-driver-core-4.1.1.jar:na]
... 45 common frames omitted
感谢您的帮助。
【问题讨论】:
-
collation: { locale: "users" } - 你是否在某处设置了区域设置?
-
找到了,我在另一个继承 User 的类中有错字。非常感谢????。
-
我发布为答案,如果有帮助请+1并接受;)
标签: java spring-boot spring-webflux spring-data-mongodb