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

liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 9c4017e  Merge pull request #1761, add Locale serialize & deserialize 
support.
9c4017e is described below

commit 9c4017e9ba7ba170262f388ac159bcccb11ce209
Author: nzomkxia <[email protected]>
AuthorDate: Mon May 14 14:06:40 2018 +0800

    Merge pull request #1761, add Locale serialize & deserialize support.
    
    Fixed #906
---
 .../dubbo/common/json/GenericJSONConverter.java     | 21 +++++++++++++++++++++
 .../com/alibaba/dubbo/common/json/JSONTest.java     |  9 +++++++++
 2 files changed, 30 insertions(+)

diff --git 
a/dubbo-common/src/main/java/com/alibaba/dubbo/common/json/GenericJSONConverter.java
 
b/dubbo-common/src/main/java/com/alibaba/dubbo/common/json/GenericJSONConverter.java
index 8a67d71..02553aa 100644
--- 
a/dubbo-common/src/main/java/com/alibaba/dubbo/common/json/GenericJSONConverter.java
+++ 
b/dubbo-common/src/main/java/com/alibaba/dubbo/common/json/GenericJSONConverter.java
@@ -28,6 +28,7 @@ import java.text.SimpleDateFormat;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
@@ -358,6 +359,24 @@ public class GenericJSONConverter implements JSONConverter 
{
             }
         };
         GlobalDecoderMap.put(Date.class, d);
+
+        d = new Decoder() {
+            @Override
+            public Object decode(Object jv) throws IOException {
+                if (jv instanceof String) {
+                    String[] items = ((String)jv).split("_");
+                    if(items.length == 1){
+                        return new Locale(items[0]);
+                    }
+                    if(items.length == 2){
+                        return new Locale(items[0], items[1]);
+                    }
+                    return new Locale(items[0], items[1], items[2]);
+                }
+                return (Locale)null;
+            }
+        };
+        GlobalDecoderMap.put(Locale.class, d);
     }
 
     @Override
@@ -407,6 +426,8 @@ public class GenericJSONConverter implements JSONConverter {
                     writeValue(item, jb, writeClass);
             }
             jb.arrayEnd();
+        } else if(obj instanceof Locale) {
+            jb.valueString(obj.toString());
         } else {
             jb.objectBegin();
 
diff --git 
a/dubbo-common/src/test/java/com/alibaba/dubbo/common/json/JSONTest.java 
b/dubbo-common/src/test/java/com/alibaba/dubbo/common/json/JSONTest.java
index bc45e87..cf631ee 100644
--- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/json/JSONTest.java
+++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/json/JSONTest.java
@@ -24,6 +24,7 @@ import java.io.StringWriter;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
@@ -169,6 +170,14 @@ public class JSONTest {
         assertEquals(test[0], 1);
     }
 
+    @Test
+    public void testLocale() throws Exception {
+        Locale obj = Locale.US;
+        String str = JSON.json(obj);
+        assertEquals("\"en_US\"", str);
+        assertEquals(obj, JSON.parse(str, Locale.class));
+    }
+
     public static class Bean1 {
         public int[] array;
         private String name, displayName;

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to