Skip to content

Suspendable controller methods returning ResponseEntity are not handled #14

@fabienmoritz

Description

@fabienmoritz

https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-ann-responseentity

The ResponseEntityResultHandler does not resolve the return type properly.

Example :

data class TestData(val value: String)

private val repo = mutableListOf<TestData>()

@RequestMapping("/testJson", produces = [MediaType.APPLICATION_JSON_UTF8_VALUE], consumes = [MediaType.APPLICATION_JSON_UTF8_VALUE])
@Controller
class JsonController {

    @GetMapping("/suspend/{value}")
    @ResponseBody
    suspend fun get(@PathVariable value: String) = repo.find { it.value == value }

// FAIL (IllegalStateException on ViewResolutionResultHandler because it is not handled by the ResponseEntityResultHandler)
    @PostMapping("/suspend")
    suspend fun createSuspend(@RequestBody value: TestData): ResponseEntity<TestData> {
        repo.add(value)
        delay(100)
        return ResponseEntity
                .created(URI("/testJson/suspend/${value.value}"))
                .body(value)
    }

// WORKS
    @PostMapping("/mono")
    fun create(@RequestBody value: TestData): Mono<ResponseEntity<TestData>> {
        repo.add(value)
        //delay(100)
        return Mono.just(ResponseEntity
                .created(URI("/testJson/suspend/${value.value}"))
                .body(value))
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions