В моем приложении Micronaut я определил ExceptionHandler
, который должен ловить WorkflowException
и возвращать HttpResponse
с кодом состояния 412 и с WorkflowExceptionVM
в качестве тела.
Вот моя текущая реализация:
@Produces
@Singleton
@Requires(classes = [WorkflowException::class, ExceptionHandler::class])
class WorkflowExceptionHandler : ExceptionHandler<WorkflowException, HttpResponse<WorkflowExceptionVM>> {
override fun handle(request: HttpRequest<Any>, exception: WorkflowException): HttpResponse<WorkflowExceptionVM> {
return HttpResponse.status<WorkflowExceptionVM>(HttpStatus.PRECONDITION_FAILED)
.body(WorkflowExceptionVM(exception.code))
}
}
Он дает ответ с правильным кодом, но не включает тело.
Вот мой тест:
@Test
fun `Should handle WorkflowException`() {
val request = POST(THE_URL, THE_BODY).basicAuth("user", "password")
val exception = shouldThrow<HttpClientResponseException>
{client.toBlocking().exchange(request, MyEntity::class.java) }
exception.response.code() shouldBe 412 // This works
exception.response.body() // ERROR: this is null
}
Как добавить тело в ответ?