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.onError
switchIfEmpty
内部
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)
            }           
        }
    }
}