You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2019/03/10 15:52:34 UTC

[juneau] 09/09: Strip trailing slashes from RestMethod.path.

This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git

commit 2244c05dbbd4ecf75bd8e69a7b442b8a3db186f3
Author: JamesBognar <ja...@apache.org>
AuthorDate: Sun Mar 10 11:52:00 2019 -0400

    Strip trailing slashes from RestMethod.path.
---
 .../juneau/microservice/jetty/JettyMicroservice.java      |  3 +++
 .../org/apache/juneau/rest/BasicRestInfoProvider.java     |  3 ++-
 .../src/main/java/org/apache/juneau/rest/RestContext.java |  3 ++-
 .../main/java/org/apache/juneau/rest/RestJavaMethod.java  |  3 ++-
 .../main/java/org/apache/juneau/rest/util/RestUtils.java  | 15 +++++++++++++++
 5 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
index 6c16139..c6ac6c6 100644
--- a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.microservice.jetty;
 
 import static org.apache.juneau.internal.SystemUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
 import java.net.*;
@@ -389,6 +390,8 @@ public class JettyMicroservice extends Microservice {
 	 */
 	public JettyMicroservice addServlet(Servlet servlet, String pathSpec) {
 		ServletHolder sh = new ServletHolder(servlet);
+		if (pathSpec != null && ! pathSpec.endsWith("/*"))
+			pathSpec = trimTrailingSlashes(pathSpec) + "/*";
 		getServletContextHandler().addServlet(sh, pathSpec);
 		return this;
 	}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
index 58221e3..e7ec31f 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
@@ -14,6 +14,7 @@ package org.apache.juneau.rest;
 
 import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.rest.util.RestUtils.*;
 
 import java.lang.reflect.Method;
 import java.util.*;
@@ -397,7 +398,7 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 		if (s != null) {
 			Map<String,OperationMap> sp = s.getPaths();
 			if (sp != null) {
-				Map<String,Operation> spp = sp.get(getAnnotation(RestMethod.class, method).path());
+				Map<String,Operation> spp = sp.get(fixMethodPath(getAnnotation(RestMethod.class, method).path()));
 				if (spp != null)
 					return spp.get(req.getMethod());
 			}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index b758b76..66703de 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.rest.util.RestUtils.*;
 
 import java.io.*;
 import java.lang.reflect.*;
@@ -3229,7 +3230,7 @@ public final class RestContext extends BeanContext {
 			for (java.lang.reflect.Method method : resourceClass.getMethods()) {
 				RestMethod a = ClassUtils.getAnnotation(RestMethod.class, method);
 				if (a != null) {
-					methodsFound.add(method.getName() + "," + emptyIfNull(firstNonEmpty(a.name(), a.method())) + "," + a.path());
+					methodsFound.add(method.getName() + "," + emptyIfNull(firstNonEmpty(a.name(), a.method())) + "," + fixMethodPath(a.path()));
 					try {
 						if (! isPublic(method))
 							throw new RestServletException("@RestMethod method {0}.{1} must be defined as public.", resourceClass.getName(), method.getName());
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestJavaMethod.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestJavaMethod.java
index 1643f01..a31ca75 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestJavaMethod.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestJavaMethod.java
@@ -202,7 +202,8 @@ public class RestJavaMethod implements Comparable<RestJavaMethod>  {
 					pgb.append(mParsers);
 				}
 
-				String p = m.path();
+				//String p = trimTrailingSlashes(m.path());
+				String p = fixMethodPath(m.path());
 				if (isEmpty(p))
 					p = HttpUtils.detectHttpPath(method, true);
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
index fc6d358..8a57fae 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
@@ -25,6 +25,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.utils.*;
 
@@ -439,4 +440,18 @@ public final class RestUtils {
 		}
 		return op;
 	}
+
+	/**
+	 * Normalizes the {@link RestMethod#path()} value.
+	 *
+	 * @param path
+	 * @return The normalized path.
+	 */
+	public static String fixMethodPath(String path) {
+		if (path == null)
+			return null;
+		if (path.equals("/"))
+			return path;
+		return trimTrailingSlashes(path);
+	}
 }