From 5be9b687b57c592706a59caf6ae6f629fc9b3ff3 Mon Sep 17 00:00:00 2001 From: Benedikt Galbavy Date: Tue, 26 Dec 2023 17:28:07 +0100 Subject: [PATCH] improved path logic ~5 min work --- src/Main.java | 2 +- src/at/nanopenguin/mtcg/http/Router.java | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/Main.java b/src/Main.java index 9e22eaa..c3a1013 100644 --- a/src/Main.java +++ b/src/Main.java @@ -8,7 +8,7 @@ import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { Router router = new Router(); - router.addRoute(HttpMethod.GET, "/test/{var}/service", new TestService(), 1); + router.addRoute(HttpMethod.GET, "/test/{var}/service", new TestService(), 2); Server server = new Server(10001, 10, router); server.start(); diff --git a/src/at/nanopenguin/mtcg/http/Router.java b/src/at/nanopenguin/mtcg/http/Router.java index 33e67c5..4c454f5 100644 --- a/src/at/nanopenguin/mtcg/http/Router.java +++ b/src/at/nanopenguin/mtcg/http/Router.java @@ -3,7 +3,6 @@ package at.nanopenguin.mtcg.http; import at.nanopenguin.mtcg.application.Service; import java.util.*; -import java.util.stream.IntStream; public class Router { private Map> routeMap = new HashMap<>(); @@ -15,8 +14,9 @@ public class Router { } List routeComponents = new ArrayList(Arrays.asList(route.split("/"))); - routeComponents.remove(0); - routeComponents.set(pathVarPos, "{var}"); + if (pathVarPos > 0) { + routeComponents.set(pathVarPos, "{var}"); + } for (int i = 0; i < routeComponents.size(); i++) { Route routeComponent = new Route(i == routeComponents.size() - 1 ? service : null, i == pathVarPos - 1); @@ -29,18 +29,13 @@ public class Router { public Service resolveRoute(final HttpMethod method, final String route) { System.out.println("resolving route " + route); String[] routeComponents = route.split("/"); - Route component = this.routeMap.get(method).get(routeComponents[1]); - - if (component == null) { - return null; - } String pathVariable = null; - int i = 1; + int i = 0; + Route component = this.routeMap.get(method).get(routeComponents[i]); System.out.println(routeComponents[i]); for (String search = routeComponents[i]; component != null && component.service == null; component = this.routeMap.get(method).get(search = String.join("/", search, routeComponents[++i]))) { - System.out.println(component); if (component.hasPathVariable) { pathVariable = routeComponents[++i]; search = String.join("/", search, "{var}");