¿Cómo acceder a Mono <T> mientras se maneja la exception con onErrorMap ()?

En la class de datos I definida, el 'nombre' debe ser único en toda la colección de mongo:

@Document data class Inn(@Indexed(unique = true) val name: String, val description: String) { @Id var id: String = UUID.randomUUID().toString() var intro: String = "" } 

Así que en service tengo que capturar la exception inesperada si alguien pasa el mismo nombre de nuevo.

 @Service class InnService(val repository: InnRepository) { fun create(inn: Mono<Inn>): Mono<Inn> = repository .create(inn) .onErrorMap( DuplicateKeyException::class.java, { err -> InnAlreadyExistedException("The inn already existed", err) } ) } 

Esto está bien, pero ¿qué "The inn named '$it.name' already existed" si quiero agregar más información al post excepcional como "The inn named '$it.name' already existed" , ¿Qué debo hacer para transformar la exception con un post enriquecido?

Claramente, asignar Mono<Inn> a una variable local al principio no es una buena idea …

En una situación similar en el manejo, me gustaría dar al cliente más información que deriva de la exception personalizada, pero no se puede encontrar la forma adecuada.

 @Component class InnHandler(val innService: InnService) { fun create(req: ServerRequest): Mono<ServerResponse> { return innService .create(req.bodyToMono<Inn>()) .flatMap { created(URI.create("/api/inns/${it.id}")) .contentType(MediaType.APPLICATION_JSON_UTF8).body(it.toMono()) } .onErrorReturn( InnAlreadyExistedException::class.java, badRequest().body(mapOf("code" to "SF400", "message" to t.message).toMono()).block() ) } }