``` fun Router.blockingPost(url: String, handler: ...
# server
j
Copy code
fun Router.blockingPost(url: String, handler: KFunction1<@ParameterName(name = "request") RestRequest, RestResponse>) {
	<http://this.post|this.post>(url).handler { rtx ->

		// extract cookies
		val cookies = mutableMapOf<String, String>()
		rtx.cookies().forEach { cookie ->
			cookies.put(key = cookie.name, value = cookie.value)
		}

		// extract body
		rtx.request().bodyHandler { btx ->
			rtx.vertx().executeBlocking<RestResponse>({
				val response = handler.invoke(RestRequest(
					cookies = cookies,
					routingContext = rtx,
					json = String(btx.bytes)))
				it.complete(response)
			}, {
				val response = it.result()
				if (it.succeeded()) {
					if (response.json.isNotBlank()) {
						rtx.response().setStatusCode(200).end(response.json)
					}
				} else {
					RestEasy.log.error(it.cause().message, it.cause())
					rtx.response().setStatusCode(500).end(it.cause().message)
				}
			})
		}
	}
}