You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/02/17 00:53:59 UTC

[servicecomb-java-chassis] 01/04: [SCB-1748] support colon

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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git

commit ac817791d4de614d0161c2485c3dcb2c56ac6e2d
Author: GuoYL <gy...@gmail.com>
AuthorDate: Fri Feb 7 14:39:05 2020 +0800

    [SCB-1748] support colon
---
 .../servicecomb/common/rest/codec/param/PathProcessorCreator.java  | 7 ++++++-
 .../servicecomb/common/rest/codec/param/TestPathProcessor.java     | 7 +++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
index 7ddddbf..896e870 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
@@ -17,7 +17,9 @@
 
 package org.apache.servicecomb.common.rest.codec.param;
 
+import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Type;
+import java.net.URLDecoder;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
@@ -41,7 +43,7 @@ public class PathProcessorCreator implements ParamValueProcessorCreator {
     }
 
     @Override
-    public Object getValue(HttpServletRequest request) {
+    public Object getValue(HttpServletRequest request) throws UnsupportedEncodingException {
       @SuppressWarnings("unchecked")
       Map<String, String> pathVarMap = (Map<String, String>) request.getAttribute(RestConst.PATH_PARAMETERS);
       if (pathVarMap == null) {
@@ -52,6 +54,9 @@ public class PathProcessorCreator implements ParamValueProcessorCreator {
       if (value == null) {
         return null;
       }
+      if (value.contains(":")) {
+        return convertValue(URLDecoder.decode(value, "UTF-8"), targetType);
+      }
       return convertValue(HttpUtils.uriDecodePath(value), targetType);
     }
 
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
index 19cca94..443a04a 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
@@ -101,6 +101,13 @@ public class TestPathProcessor {
   }
 
   @Test
+  public void testGetColon() throws Exception {
+    prepareGetValue("name", String.class);
+    pathVars.put("name", "aa:bb");
+    Assert.assertEquals("aa:bb", processor.getValue(request));
+  }
+
+  @Test
   public void testGetProcessorType() {
     createProcessor("name", String.class);
     Assert.assertEquals("path", processor.getProcessorType());