Added UUID as a default type supported by Gson.
This commit is contained in:
parent
d16553701b
commit
0b5f3dc825
@ -41,6 +41,7 @@ import java.util.Set;
|
|||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of all the default type adapters ({@link JsonSerializer}s, {@link JsonDeserializer}s,
|
* List of all the default type adapters ({@link JsonSerializer}s, {@link JsonDeserializer}s,
|
||||||
@ -57,6 +58,7 @@ final class DefaultTypeAdapters {
|
|||||||
private static final EnumTypeAdapter ENUM_TYPE_ADAPTER = new EnumTypeAdapter();
|
private static final EnumTypeAdapter ENUM_TYPE_ADAPTER = new EnumTypeAdapter();
|
||||||
private static final UrlTypeAdapter URL_TYPE_ADAPTER = new UrlTypeAdapter();
|
private static final UrlTypeAdapter URL_TYPE_ADAPTER = new UrlTypeAdapter();
|
||||||
private static final UriTypeAdapter URI_TYPE_ADAPTER = new UriTypeAdapter();
|
private static final UriTypeAdapter URI_TYPE_ADAPTER = new UriTypeAdapter();
|
||||||
|
private static final UuidTypeAdapter UUUID_TYPE_ADAPTER = new UuidTypeAdapter();
|
||||||
private static final LocaleTypeAdapter LOCALE_TYPE_ADAPTER = new LocaleTypeAdapter();
|
private static final LocaleTypeAdapter LOCALE_TYPE_ADAPTER = new LocaleTypeAdapter();
|
||||||
private static final CollectionTypeAdapter COLLECTION_TYPE_ADAPTER = new CollectionTypeAdapter();
|
private static final CollectionTypeAdapter COLLECTION_TYPE_ADAPTER = new CollectionTypeAdapter();
|
||||||
private static final MapTypeAdapter MAP_TYPE_ADAPTER = new MapTypeAdapter();
|
private static final MapTypeAdapter MAP_TYPE_ADAPTER = new MapTypeAdapter();
|
||||||
@ -94,6 +96,7 @@ final class DefaultTypeAdapters {
|
|||||||
map.register(Enum.class, ENUM_TYPE_ADAPTER);
|
map.register(Enum.class, ENUM_TYPE_ADAPTER);
|
||||||
map.register(URL.class, URL_TYPE_ADAPTER);
|
map.register(URL.class, URL_TYPE_ADAPTER);
|
||||||
map.register(URI.class, URI_TYPE_ADAPTER);
|
map.register(URI.class, URI_TYPE_ADAPTER);
|
||||||
|
map.register(UUID.class, UUUID_TYPE_ADAPTER);
|
||||||
map.register(Locale.class, LOCALE_TYPE_ADAPTER);
|
map.register(Locale.class, LOCALE_TYPE_ADAPTER);
|
||||||
map.register(Collection.class, COLLECTION_TYPE_ADAPTER);
|
map.register(Collection.class, COLLECTION_TYPE_ADAPTER);
|
||||||
map.register(Map.class, MAP_TYPE_ADAPTER);
|
map.register(Map.class, MAP_TYPE_ADAPTER);
|
||||||
@ -131,6 +134,7 @@ final class DefaultTypeAdapters {
|
|||||||
map.register(Enum.class, wrapDeserializer(ENUM_TYPE_ADAPTER));
|
map.register(Enum.class, wrapDeserializer(ENUM_TYPE_ADAPTER));
|
||||||
map.register(URL.class, wrapDeserializer(URL_TYPE_ADAPTER));
|
map.register(URL.class, wrapDeserializer(URL_TYPE_ADAPTER));
|
||||||
map.register(URI.class, wrapDeserializer(URI_TYPE_ADAPTER));
|
map.register(URI.class, wrapDeserializer(URI_TYPE_ADAPTER));
|
||||||
|
map.register(UUID.class, UUUID_TYPE_ADAPTER);
|
||||||
map.register(Locale.class, wrapDeserializer(LOCALE_TYPE_ADAPTER));
|
map.register(Locale.class, wrapDeserializer(LOCALE_TYPE_ADAPTER));
|
||||||
map.register(Collection.class, wrapDeserializer(COLLECTION_TYPE_ADAPTER));
|
map.register(Collection.class, wrapDeserializer(COLLECTION_TYPE_ADAPTER));
|
||||||
map.register(Map.class, wrapDeserializer(MAP_TYPE_ADAPTER));
|
map.register(Map.class, wrapDeserializer(MAP_TYPE_ADAPTER));
|
||||||
@ -329,6 +333,22 @@ final class DefaultTypeAdapters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class UuidTypeAdapter implements JsonSerializer<UUID>, JsonDeserializer<UUID> {
|
||||||
|
public JsonElement serialize(UUID src, Type typeOfSrc, JsonSerializationContext context) {
|
||||||
|
return new JsonPrimitive(src.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public UUID deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
|
||||||
|
throws JsonParseException {
|
||||||
|
return UUID.fromString(json.getAsString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return UuidTypeAdapter.class.getSimpleName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class LocaleTypeAdapter implements JsonSerializer<Locale>,
|
private static class LocaleTypeAdapter implements JsonSerializer<Locale>,
|
||||||
JsonDeserializer<Locale>, InstanceCreator<Locale> {
|
JsonDeserializer<Locale>, InstanceCreator<Locale> {
|
||||||
public JsonElement serialize(Locale src, Type typeOfSrc, JsonSerializationContext context) {
|
public JsonElement serialize(Locale src, Type typeOfSrc, JsonSerializationContext context) {
|
||||||
|
@ -25,6 +25,7 @@ import java.util.Date;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
@ -89,6 +90,19 @@ public class DefaultTypeAdaptersTest extends TestCase {
|
|||||||
assertEquals(uriValue, target.toASCIIString());
|
assertEquals(uriValue, target.toASCIIString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testUuidSerialization() throws Exception {
|
||||||
|
String uuidValue = "c237bec1-19ef-4858-a98e-521cf0aad4c0";
|
||||||
|
UUID uuid = UUID.fromString(uuidValue);
|
||||||
|
assertEquals('"' + uuidValue + '"', gson.toJson(uuid));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testUuidDeserialization() {
|
||||||
|
String uuidValue = "c237bec1-19ef-4858-a98e-521cf0aad4c0";
|
||||||
|
String json = '"' + uuidValue + '"';
|
||||||
|
UUID target = gson.fromJson(json, UUID.class);
|
||||||
|
assertEquals(uuidValue, target.toString());
|
||||||
|
}
|
||||||
|
|
||||||
public void testLocaleSerializationWithLanguage() {
|
public void testLocaleSerializationWithLanguage() {
|
||||||
Locale target = new Locale("en");
|
Locale target = new Locale("en");
|
||||||
assertEquals("\"en\"", gson.toJson(target));
|
assertEquals("\"en\"", gson.toJson(target));
|
||||||
|
Loading…
Reference in New Issue
Block a user