具有弹簧ResponseEntity的Kotlin和通用返回类型

时间:2018-04-14 09:10:47

标签: kotlin spring-webflux

假设我在Spring中使用Kotlin控制器方法,我想返回ResponseEntity<Test>ResponseEntity<Error>

如何在Kotlin中完成这项工作?我试图放ResponseEntitiy<Any>ResponseEntity<*>,但Kotlin总是抱怨。

那么如何使返回类型真正通用?

@GetMapping
fun test(): Mono<ResponseEntity<?????>>
{
    return Mono.just(1)
        .map { ResponseEntity.ok(Test("OK") }
        .switchIfEmpty(Mono.just(ResponseEntity.badRequest().body(Error("Error"))))
}

1 个答案:

答案 0 :(得分:1)

您还需要更改正文以为每次调用提供正确的类型:

fun test(): Mono<ResponseEntity<*>> {
    return Mono.just(1)
        .map { ResponseEntity.ok(Test("OK")) as ResponseEntity<*> }
        .switchIfEmpty(Mono.just(ResponseEntity.badRequest().body(Error("Error")) as ResponseEntity<*>))
}

可替换地,

fun test(): Mono<ResponseEntity<Any>> {
    return Mono.just(1)
        .map { ResponseEntity.ok<Any>(Test("OK")) }
        .switchIfEmpty(Mono.just(ResponseEntity.badRequest().body<Any>(Error("Error"))))
}

如果在Kotlin中写了ResponseEntity,它可能是协变的并简化Any案例,但它不是。

(注意:我目前无法测试,因此可能需要一些修复)