0

したがって、私は rx-java/rx-kotlin をまったく初めて使用し、Micronaut で HTTP フィルターをどこに書き込むかまで聞いたことがありません ( https://docs.micronaut.io/latest/guide/index.html#私は通常の JAX-RS フィルターしか行ったことがないので、不意を突かれました

それで試行錯誤を重ねた結果、これにたどり着きました。

 return Flowable.fromPublisher(remoteClient.getPermissions(userId))
        .subscribeOn(Schedulers.io())
        .onErrorReturn { e ->
            logger.error("Error when fetching users from remote service", e)
            emptyList()
        }
        .switchMap { permissions ->
            if (permissions.contains(somePermission)) {
                chain.proceed(request)
            } else {
                val response = HttpResponseFactory.INSTANCE.status(
                    HttpStatus.FORBIDDEN,
                    "No user found"
                )
                Flowable.just(response)
            }
        }

コードは書き直されていますが、ポイントはまだ残っています。ここには改善の余地があります。

私がやりたいことは、例外処理を改善し、例外がスローされた場合 (によって呼び出されたリモート サービスにremoteClient到達できない場合など) に 500 を返すことです。どうすればこれを達成できますか?他に何もありません次のオブザーバーの空のリストを返すために、上記のソリューション以外の方法で動作します。

4

1 に答える 1