public Object[] resolveParameters(
      Method method,
      HttpServerRequest request,
      HttpServerResponse response,
      Map<String, String> pathParams,
      Map<String, List<String>> queryParams)
      throws ParamAnnotationException {

    Annotation[][] parametersAnnotations = method.getParameterAnnotations();
    Class[] parametersTypes = method.getParameterTypes();
    Object[] parameters = new Object[parametersTypes.length];

    for (int i = 0; i < parametersTypes.length; i++) {

      Class param = parametersTypes[i];
      if (param.isAssignableFrom(request.getClass())) {
        parameters[i] = request;
      } else if (param.isAssignableFrom(response.getClass())) {
        parameters[i] = response;
      } else {
        String value =
            injectParameterValueAnnotation(
                request, pathParams, queryParams, parametersAnnotations[i]);
        parameters[i] = paramTypeResolver.resolveValueType(param, value);
      }
    }

    return parameters;
  }
 @SuppressWarnings("unchecked")
 private void writeMetric(String json, HttpServerResponse<O> response) {
   byte[] bytes = json.getBytes(Charset.defaultCharset());
   ByteBuf byteBuf = UnpooledByteBufAllocator.DEFAULT.buffer(bytes.length + EXTRA_SPACE);
   byteBuf.writeBytes(HEADER);
   byteBuf.writeBytes(bytes);
   byteBuf.writeBytes(FOOTER);
   response.writeAndFlush((O) byteBuf);
 }
 public static Observable<Void> writeError(
     HttpServerRequest<?> request, HttpServerResponse<ByteBuf> response, String message) {
   System.err.println("Server => Error [" + request.getPath() + "] => " + message);
   response.setStatus(HttpResponseStatus.BAD_REQUEST);
   return response.writeStringAndFlush("Error 500: " + message);
 }
 private void writeHeaders(HttpServerResponse<O> response) {
   response.getHeaders().add("Content-Type", "text/event-stream;charset=UTF-8");
   response.getHeaders().add("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate");
   response.getHeaders().add("Pragma", "no-cache");
 }