diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java
index 8717fcd..e0b6610 100644
--- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java
+++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java
@@ -142,7 +142,7 @@
                     f.setAccessible(true);
                     String v = properties.get(f.getName());
                     if (!StringUtils.isBlank(v)) {
-                        f.set(obj, value(v, f));
+                        f.set(obj, value(trim(v), f));
                     } else {
                         setEmptyValue(v, f, obj);
                     }
@@ -317,7 +317,7 @@
     public static <T> List<T> stringToList(String val, Class<T> type) {
         String[] tokens = trim(val).split(",");
         return Arrays.stream(tokens).map(t -> {
-            return convert(t, type);
+            return convert(trim(t), type);
         }).collect(Collectors.toList());
     }
 
@@ -333,7 +333,7 @@
     public static <T> Set<T> stringToSet(String val, Class<T> type) {
         String[] tokens = trim(val).split(",");
         return Arrays.stream(tokens).map(t -> {
-            return convert(t, type);
+            return convert(trim(t), type);
         }).collect(Collectors.toSet());
     }
 
@@ -344,7 +344,7 @@
             String[] keyValue = trim(token).split("=");
             checkArgument(keyValue.length == 2,
                     strValue + " map-value is not in correct format key1=value,key2=value2");
-            map.put(convert(keyValue[0], keyType), convert(keyValue[1], valueType));
+            map.put(convert(trim(keyValue[0]), keyType), convert(trim(keyValue[1]), valueType));
         }
         return map;
     }
diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java
index a085311..a8a3fee 100644
--- a/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java
+++ b/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java
@@ -19,9 +19,13 @@
 package org.apache.pulsar.common.util;
 
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
 
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
+import java.util.Set;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.Maps;
@@ -35,6 +39,7 @@
         properties.put("stringStringMap", "key1=value1,key2=value2");
         properties.put("stringIntMap", "key1=1,key2=2");
         properties.put("longStringMap", "1=value1,2=value2");
+
         MyConfig config = new MyConfig();
         FieldParser.update(properties, config);
         assertEquals(config.name, "config");
@@ -49,11 +54,46 @@
 
     }
 
+    @Test
+    public void testWithBlankVallueConfig() {
+        Map<String, String> properties = new HashMap<>();
+        properties.put("name", "  config   ");
+        properties.put("stringStringMap", "key1=value1  , key2=   value2  ");
+        properties.put("stringIntMap", "key1 = 1, key2 =  2 ");
+        properties.put("longStringMap", " 1 =value1  ,2  =value2    ");
+        properties.put("longList", " 1, 3,  8 , 0  ,9   ");
+        properties.put("stringList", "  aa, bb   ,  cc, ee  ");
+        properties.put("longSet", " 1, 3,  8 , 0 , 3, 1   ,9   ");
+        properties.put("stringSet", "  aa, bb   ,  cc, ee , bb,  aa ");
+
+        MyConfig config = new MyConfig();
+        FieldParser.update(properties, config);
+        assertEquals(config.name, "config");
+        assertEquals(config.stringStringMap.get("key1"), "value1");
+        assertEquals(config.stringStringMap.get("key2"), "value2");
+
+        assertEquals((int) config.stringIntMap.get("key1"), 1);
+        assertEquals((int) config.stringIntMap.get("key2"), 2);
+
+        assertEquals(config.longStringMap.get(1L), "value1");
+        assertEquals(config.longStringMap.get(2L), "value2");
+
+        assertEquals((long)config.longList.get(2), 8);
+        assertEquals(config.stringList.get(1), "bb");
+
+        assertTrue(config.longSet.contains(3L));
+        assertTrue(config.stringSet.contains("bb"));
+    }
+
     public static class MyConfig {
         public String name;
         public Map<String, String> stringStringMap;
         public Map<String, Integer> stringIntMap;
         public Map<Long, String> longStringMap;
+        public List<Long> longList;
+        public List<String> stringList;
+        public Set<Long> longSet;
+        public Set<String> stringSet;
     }
 
 }
