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