From 880582a1b37ed54fc719734414c0672f80c3dc74 Mon Sep 17 00:00:00 2001 From: ulrich Date: Wed, 21 Feb 2024 13:41:44 +0000 Subject: [PATCH] Verarbeitung von Routen um variable Elemente erweitert (einstweilen noch experimentell) --- src/de/uhilger/neon/Handler.java | 24 ++++++++++++++++++++++-- 1 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/de/uhilger/neon/Handler.java b/src/de/uhilger/neon/Handler.java index 6caa331..cf73907 100644 --- a/src/de/uhilger/neon/Handler.java +++ b/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)) { -- Gitblit v1.9.3