したがって、私は 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 を返すことです。どうすればこれを達成できますか?他に何もありません次のオブザーバーの空のリストを返すために、上記のソリューション以外の方法で動作します。