Skip to content

Commit 9c4017e

Browse files
nzomkxiachickenlj
authored andcommitted
Merge pull request #1761, add Locale serialize & deserialize support.
Fixed #906
1 parent 038b600 commit 9c4017e

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

dubbo-common/src/main/java/com/alibaba/dubbo/common/json/GenericJSONConverter.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.Collection;
2929
import java.util.Date;
3030
import java.util.HashMap;
31+
import java.util.Locale;
3132
import java.util.Map;
3233
import java.util.concurrent.atomic.AtomicInteger;
3334
import java.util.concurrent.atomic.AtomicLong;
@@ -358,6 +359,24 @@ public Object decode(Object jv) throws IOException {
358359
}
359360
};
360361
GlobalDecoderMap.put(Date.class, d);
362+
363+
d = new Decoder() {
364+
@Override
365+
public Object decode(Object jv) throws IOException {
366+
if (jv instanceof String) {
367+
String[] items = ((String)jv).split("_");
368+
if(items.length == 1){
369+
return new Locale(items[0]);
370+
}
371+
if(items.length == 2){
372+
return new Locale(items[0], items[1]);
373+
}
374+
return new Locale(items[0], items[1], items[2]);
375+
}
376+
return (Locale)null;
377+
}
378+
};
379+
GlobalDecoderMap.put(Locale.class, d);
361380
}
362381

363382
@Override
@@ -407,6 +426,8 @@ public void writeValue(Object obj, JSONWriter jb, boolean writeClass) throws IOE
407426
writeValue(item, jb, writeClass);
408427
}
409428
jb.arrayEnd();
429+
} else if(obj instanceof Locale) {
430+
jb.valueString(obj.toString());
410431
} else {
411432
jb.objectBegin();
412433

dubbo-common/src/test/java/com/alibaba/dubbo/common/json/JSONTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.HashMap;
2525
import java.util.LinkedHashMap;
2626
import java.util.List;
27+
import java.util.Locale;
2728
import java.util.Map;
2829

2930
import static org.junit.Assert.assertEquals;
@@ -169,6 +170,14 @@ public void testParse2Arguments() throws Exception {
169170
assertEquals(test[0], 1);
170171
}
171172

173+
@Test
174+
public void testLocale() throws Exception {
175+
Locale obj = Locale.US;
176+
String str = JSON.json(obj);
177+
assertEquals("\"en_US\"", str);
178+
assertEquals(obj, JSON.parse(str, Locale.class));
179+
}
180+
172181
public static class Bean1 {
173182
public int[] array;
174183
private String name, displayName;

0 commit comments

Comments
 (0)