Ultrakompakter HTTP Server
ulrich
2024-02-21 880582a1b37ed54fc719734414c0672f80c3dc74
Verarbeitung von Routen um variable Elemente erweitert (einstweilen noch experimentell)
1 files modified
24 ■■■■■ changed files
src/de/uhilger/neon/Handler.java 24 ●●●●● patch | view | raw | blame | history
src/de/uhilger/neon/Handler.java
@@ -128,8 +128,14 @@
   */
  @Override
  public void handle(HttpExchange exchange) throws IOException {
    HttpHelper hh = new HttpHelper();
    String route = hh.getRouteString(exchange);
    String route = exchange
            .getRequestURI()
            .getPath()
            .substring(exchange
                    .getHttpContext()
                    .getPath()
                    .length());
    Type requestMethod = Type.valueOf(exchange.getRequestMethod());
    /*
      Es wird erst geprueft, ob zu einer bestimmten Route 
@@ -199,11 +205,25 @@
    Parameter[] methodParams = method.getParameters();
    Object[] actionArgs = new Object[count];
    String[] routeParams = subroute.split("/");
    /*
      Fall 1: Es sind mehr als ein Parameter zu uebergeben und die Route enthaelt
      weniger Parameter als die Methode erfordert.
      Fall 2: Die Methode erwartet Parameter und der erste Parameter ist nicht
      vom Typ HttpExchange.
      Wenn einer dieser beiden Faelle eintritt, wird alles als Parameter an die Methode
      uebergeben, was eventuell als Teil einer Query im URL oder im Body enthalten ist.
      Ein Actor kann dann den Body nicht mehr lesen, weil das bereits an dieser Stelle
      gemacht wurde.
    */
    Map queryParams = new HashMap();
    if ((count > 1 && count > routeParams.length)
            || (methodParams.length > 0 && !methodParams[0].getType().equals(HttpExchange.class))) {
      queryParams = new HttpHelper().getQueryMap(exchange);
    }
    int k = 0;
    for (Parameter methodParam : methodParams) {
      if (methodParam.getType().equals(HttpExchange.class)) {