Skip to content

Commit 346c65a

Browse files
committed
Add support for byte arrays serialized as base64 string
1 parent 8fdea01 commit 346c65a

File tree

16 files changed

+727
-235
lines changed

16 files changed

+727
-235
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package net.servicestack.client;
2+
3+
import java.util.Base64;
4+
5+
public class ByteArray {
6+
public static byte[] parse(String base64) {
7+
return Base64.getDecoder().decode(base64);
8+
}
9+
public static String toString(byte[] bytes) {
10+
return Base64.getEncoder().encodeToString(bytes);
11+
}
12+
}

src/AndroidClient/android/src/main/java/net/servicestack/client/DateTime.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@ public class DateTime {
66
public static Date parse(String date) {
77
return Utils.parseDate(date);
88
}
9+
public static String toString(Date date) {
10+
return Utils.toJsonDate(date);
11+
}
912
}

src/AndroidClient/android/src/main/java/net/servicestack/client/Guid.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@ public class Guid {
66
public static UUID parse(String guid) {
77
return Utils.fromGuidString(guid);
88
}
9+
public static String toString(UUID uuid) {
10+
return Utils.toGuidString(uuid);
11+
}
912
}

src/AndroidClient/android/src/main/java/net/servicestack/client/JsonSerializers.java

Lines changed: 16 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -3,82 +3,46 @@
33

44
package net.servicestack.client;
55

6-
import com.google.gson.Gson;
7-
import com.google.gson.JsonDeserializationContext;
8-
import com.google.gson.JsonDeserializer;
9-
import com.google.gson.JsonElement;
10-
import com.google.gson.JsonParseException;
11-
import com.google.gson.JsonPrimitive;
12-
import com.google.gson.JsonSerializationContext;
13-
import com.google.gson.JsonSerializer;
14-
import com.google.gson.TypeAdapter;
15-
import com.google.gson.TypeAdapterFactory;
6+
import com.google.gson.*;
167
import com.google.gson.reflect.TypeToken;
178
import com.google.gson.stream.JsonReader;
189
import com.google.gson.stream.JsonToken;
1910
import com.google.gson.stream.JsonWriter;
2011

2112
import java.io.IOException;
22-
import java.lang.reflect.Type;
23-
import java.util.Date;
24-
import java.util.HashMap;
25-
import java.util.Locale;
26-
import java.util.Map;
27-
import java.util.UUID;
13+
import java.util.*;
2814

2915
public class JsonSerializers {
3016
public static JsonSerializer<Date> getDateSerializer(){
31-
return new JsonSerializer<Date>() {
32-
@Override
33-
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
34-
return src == null ? null : new JsonPrimitive(Utils.toJsonDate(src));
35-
}
36-
};
17+
return (src, typeOfSrc, context) -> src == null ? null : new JsonPrimitive(Utils.toJsonDate(src));
3718
}
3819

3920
public static JsonDeserializer<Date> getDateDeserializer(){
40-
return new JsonDeserializer<Date>() {
41-
@Override
42-
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
43-
return json == null ? null : Utils.parseDate(json.getAsString());
44-
}
45-
};
21+
return (json, typeOfT, context) -> json == null ? null : Utils.parseDate(json.getAsString());
4622
}
4723

4824
public static JsonSerializer<TimeSpan> getTimeSpanSerializer(){
49-
return new JsonSerializer<TimeSpan>() {
50-
@Override
51-
public JsonElement serialize(TimeSpan src, Type typeOfSrc, JsonSerializationContext context) {
52-
return src == null ? null : new JsonPrimitive(src.toXsdDuration());
53-
}
54-
};
25+
return (src, typeOfSrc, context) -> src == null ? null : new JsonPrimitive(src.toXsdDuration());
5526
}
5627

5728
public static JsonDeserializer<TimeSpan> getTimeSpanDeserializer(){
58-
return new JsonDeserializer<TimeSpan>() {
59-
@Override
60-
public TimeSpan deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
61-
return json == null ? null : TimeSpan.parse(json.getAsString());
62-
}
63-
};
29+
return (json, typeOfT, context) -> json == null ? null : TimeSpan.parse(json.getAsString());
6430
}
6531

6632
public static JsonSerializer<UUID> getGuidSerializer(){
67-
return new JsonSerializer<UUID>() {
68-
@Override
69-
public JsonElement serialize(UUID src, Type typeOfSrc, JsonSerializationContext context) {
70-
return src == null ? null : new JsonPrimitive(Utils.toGuidString(src));
71-
}
72-
};
33+
return (src, typeOfSrc, context) -> src == null ? null : new JsonPrimitive(Utils.toGuidString(src));
7334
}
7435

7536
public static JsonDeserializer<UUID> getGuidDeserializer(){
76-
return new JsonDeserializer<UUID>() {
77-
@Override
78-
public UUID deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
79-
return json == null ? null : Utils.fromGuidString(json.getAsString());
80-
}
81-
};
37+
return (json, typeOfT, context) -> json == null ? null : Utils.fromGuidString(json.getAsString());
38+
}
39+
40+
public static JsonSerializer<byte[]> getByteArraySerializer(){
41+
return (src, typeOfSrc, context) -> src == null ? null : new JsonPrimitive(Base64.getEncoder().encodeToString(src));
42+
}
43+
44+
public static JsonDeserializer<byte[]> getByteArrayDeserializer(){
45+
return (json, typeOfT, context) -> json == null ? null : Base64.getDecoder().decode(json.getAsString());
8246
}
8347

8448
public static class CaseInsensitiveEnumTypeAdapterFactory implements TypeAdapterFactory {

src/AndroidClient/android/src/main/java/net/servicestack/client/JsonServiceClient.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ public GsonBuilder getGsonBuilder() {
9191
.registerTypeAdapter(TimeSpan.class, JsonSerializers.getTimeSpanSerializer())
9292
.registerTypeAdapter(TimeSpan.class, JsonSerializers.getTimeSpanDeserializer())
9393
.registerTypeAdapter(UUID.class, JsonSerializers.getGuidSerializer())
94-
.registerTypeAdapter(UUID.class, JsonSerializers.getGuidDeserializer());
94+
.registerTypeAdapter(UUID.class, JsonSerializers.getGuidDeserializer())
95+
.registerTypeAdapter(byte[].class, JsonSerializers.getByteArraySerializer())
96+
.registerTypeAdapter(byte[].class, JsonSerializers.getByteArrayDeserializer());
9597
}
9698

9799
public Gson getGson() {

src/AndroidClient/android/src/main/java/net/servicestack/client/TimeSpan.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,10 @@ public static TimeSpan parse(String xsdDuration){
194194
return new TimeSpan(interval);
195195
}
196196

197+
public static String toString(TimeSpan timeSpan) {
198+
return timeSpan.toXsdDuration();
199+
}
200+
197201
@Override
198202
public boolean equals(Object o) {
199203
if (this == o) return true;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package net.servicestack.client;
2+
3+
import java.util.Base64;
4+
5+
public class ByteArray {
6+
public static byte[] parse(String base64) {
7+
return Base64.getDecoder().decode(base64);
8+
}
9+
public static String toString(byte[] bytes) {
10+
return Base64.getEncoder().encodeToString(bytes);
11+
}
12+
}

src/AndroidClient/client/src/main/java/net/servicestack/client/DateTime.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@ public class DateTime {
66
public static Date parse(String date) {
77
return Utils.parseDate(date);
88
}
9+
public static String toString(Date date) {
10+
return Utils.toJsonDate(date);
11+
}
912
}

src/AndroidClient/client/src/main/java/net/servicestack/client/Guid.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@ public class Guid {
66
public static UUID parse(String guid) {
77
return Utils.fromGuidString(guid);
88
}
9+
public static String toString(UUID uuid) {
10+
return Utils.toGuidString(uuid);
11+
}
912
}

src/AndroidClient/client/src/main/java/net/servicestack/client/JsonSerializers.java

Lines changed: 16 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -3,82 +3,46 @@
33

44
package net.servicestack.client;
55

6-
import com.google.gson.Gson;
7-
import com.google.gson.JsonDeserializationContext;
8-
import com.google.gson.JsonDeserializer;
9-
import com.google.gson.JsonElement;
10-
import com.google.gson.JsonParseException;
11-
import com.google.gson.JsonPrimitive;
12-
import com.google.gson.JsonSerializationContext;
13-
import com.google.gson.JsonSerializer;
14-
import com.google.gson.TypeAdapter;
15-
import com.google.gson.TypeAdapterFactory;
6+
import com.google.gson.*;
167
import com.google.gson.reflect.TypeToken;
178
import com.google.gson.stream.JsonReader;
189
import com.google.gson.stream.JsonToken;
1910
import com.google.gson.stream.JsonWriter;
2011

2112
import java.io.IOException;
22-
import java.lang.reflect.Type;
23-
import java.util.Date;
24-
import java.util.HashMap;
25-
import java.util.Locale;
26-
import java.util.Map;
27-
import java.util.UUID;
13+
import java.util.*;
2814

2915
public class JsonSerializers {
3016
public static JsonSerializer<Date> getDateSerializer(){
31-
return new JsonSerializer<Date>() {
32-
@Override
33-
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
34-
return src == null ? null : new JsonPrimitive(Utils.toJsonDate(src));
35-
}
36-
};
17+
return (src, typeOfSrc, context) -> src == null ? null : new JsonPrimitive(Utils.toJsonDate(src));
3718
}
3819

3920
public static JsonDeserializer<Date> getDateDeserializer(){
40-
return new JsonDeserializer<Date>() {
41-
@Override
42-
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
43-
return json == null ? null : Utils.parseDate(json.getAsString());
44-
}
45-
};
21+
return (json, typeOfT, context) -> json == null ? null : Utils.parseDate(json.getAsString());
4622
}
4723

4824
public static JsonSerializer<TimeSpan> getTimeSpanSerializer(){
49-
return new JsonSerializer<TimeSpan>() {
50-
@Override
51-
public JsonElement serialize(TimeSpan src, Type typeOfSrc, JsonSerializationContext context) {
52-
return src == null ? null : new JsonPrimitive(src.toXsdDuration());
53-
}
54-
};
25+
return (src, typeOfSrc, context) -> src == null ? null : new JsonPrimitive(src.toXsdDuration());
5526
}
5627

5728
public static JsonDeserializer<TimeSpan> getTimeSpanDeserializer(){
58-
return new JsonDeserializer<TimeSpan>() {
59-
@Override
60-
public TimeSpan deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
61-
return json == null ? null : TimeSpan.parse(json.getAsString());
62-
}
63-
};
29+
return (json, typeOfT, context) -> json == null ? null : TimeSpan.parse(json.getAsString());
6430
}
6531

6632
public static JsonSerializer<UUID> getGuidSerializer(){
67-
return new JsonSerializer<UUID>() {
68-
@Override
69-
public JsonElement serialize(UUID src, Type typeOfSrc, JsonSerializationContext context) {
70-
return src == null ? null : new JsonPrimitive(Utils.toGuidString(src));
71-
}
72-
};
33+
return (src, typeOfSrc, context) -> src == null ? null : new JsonPrimitive(Utils.toGuidString(src));
7334
}
7435

7536
public static JsonDeserializer<UUID> getGuidDeserializer(){
76-
return new JsonDeserializer<UUID>() {
77-
@Override
78-
public UUID deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
79-
return json == null ? null : Utils.fromGuidString(json.getAsString());
80-
}
81-
};
37+
return (json, typeOfT, context) -> json == null ? null : Utils.fromGuidString(json.getAsString());
38+
}
39+
40+
public static JsonSerializer<byte[]> getByteArraySerializer(){
41+
return (src, typeOfSrc, context) -> src == null ? null : new JsonPrimitive(Base64.getEncoder().encodeToString(src));
42+
}
43+
44+
public static JsonDeserializer<byte[]> getByteArrayDeserializer(){
45+
return (json, typeOfT, context) -> json == null ? null : Base64.getDecoder().decode(json.getAsString());
8246
}
8347

8448
public static class CaseInsensitiveEnumTypeAdapterFactory implements TypeAdapterFactory {

0 commit comments

Comments
 (0)