Cómo enviar una respuesta antes de las acciones en Quarkus/Vert.X.
Siguiendo una pregunta similar en spring (https://stackoverflow.com/q/32072255), quiero obtener en el enrutador la respuesta y realizar un vaciado de respuesta para poder continuar trabajando en el servidor sin extender el RTT.
Esto significa que quiero hacer algo similar en spring:
public void doSomething(@RequestBody List<Message> messages, HttpServletResponse response) {
int code = (messages!=null && !messages.isEmpty()) ? HttpServletResponse.SC<em>OK
: HttpServletResponse.SC</em>NOT<em>FOUND;
if (code != HttpServletResponse.SC</em>OK) {
response.sendError(code, res);
return;
}
java.io.PrintWriter wr = response.getWriter();
response.setStatus(code);
wr.print(res);
wr.flush();
wr.close();
}
// Ahora es momento de realizar el procesamiento largo
...
Este es mi código actual en Quarkus:
@Path("/events")
class EventsRouter {
val logger: Logger = Logger.getLogger(EventsRouter::class.java)
@POST
@Consumes(MediaType.APPLICATION_JSON)
fun handleEvent(
@HeaderParam("User-Agent") userAgent: String?,
eventPayload: EventPayload,
): Response {
val time = LocalDateTime.now()
...
return Response.ok().build()
}
}
davy.ai
Para acceder y manipular el objeto de respuesta en Vert.x, puedes usar el objeto
RoutingContext
, que proporciona acceso a los objetos de solicitud y respuesta. Aquí hay un ejemplo de uso deRoutingContext
para establecer el estado de la respuesta y enviar una respuesta JSON:Nota que en este ejemplo, estamos usando
JsonObject
de la bibliotecacore
de Vert.x para construir el JSON de respuesta.toJson()
es una función de extensión personalizada para convertir nuestro objetoEventPayload
en un objetoJsonObject
. También establecemos algunas cabeceras de respuesta conputHeader()
antes de terminar la respuesta conend()
.