Java Micronaut映射空可流至404
给定:我有一个服务,它产生一个可流动的Java Micronaut映射空可流至404,java,kotlin,rx-java,micronaut,Java,Kotlin,Rx Java,Micronaut,给定:我有一个服务,它产生一个可流动的。此可流动的可以为空 我有一个控制器,看起来像这样: @Controller("/api}") class ApiController constructor( private val myService: MyService) { @Get("/") @Produces(MediaType.APPLICATION_JSON) fun getSomething(): Flowable<T> { return
。此可流动的可以为空
我有一个控制器,看起来像这样:
@Controller("/api}")
class ApiController constructor( private val myService: MyService) {
@Get("/")
@Produces(MediaType.APPLICATION_JSON)
fun getSomething(): Flowable<T> {
return myService.get()
}
}
当我用firefox调用它时,会产生以下结果:
HttpResponseStatus: 200
HttpContent: [
Yes, the closing bracet is missing!
我不知道Micronaut,但我想这可能是你想要的:
Flowable.empty<Int>()
.switchIfEmpty { it.onError(Exception()) } // or HttpStatusException(404) in your case
.subscribe({
println(it)
}, {
it.printStackTrace()
})
Flowable.empty()
.switchIfEmpty{it.onError(Exception())}//或您的案例中的HttpStatusException(404)
.订阅({
println(it)
}, {
it.printStackTrace()
})
可流动的
是空的,您从下游得到的是在开关ifempty
中创建的异常
。请注意,您必须调用it.onErrorswitchIfEmpty
内部switchIfEmpty一个可能的解决方案是使用Maybe而不是Flowable
@Controller("/api")
class HelloController {
@Get("/")
@Produces(MediaType.APPLICATION_JSON)
fun get(): Maybe<String> {
return Flowable.empty<String>()
.toList()
.flatMapMaybe { x ->
if (x.size == 0)
Maybe.empty<String>()
else
Maybe.just(x)
}
}
}
}
@Controller(“/api”)
类Hello控制器{
@获取(“/”)
@产生(MediaType.APPLICATION_JSON)
可能吧{
return Flowable.empty()
托利斯先生()
.flatmap可能{x->
如果(x.size==0)
可能是空的
其他的
也许吧,只是(x)
}
}
}
}
这不是最好的解决办法,而是可行的办法
@Controller("/api")
class HelloController {
@Get("/")
@Produces(MediaType.APPLICATION_JSON)
fun get(): Maybe<String> {
return Flowable.empty<String>()
.toList()
.flatMapMaybe { x ->
if (x.size == 0)
Maybe.empty<String>()
else
Maybe.just(x)
}
}
}
}