下面列出了io.grpc.Metadata#AsciiMarshaller ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* A metadata marshaller that encodes objects as JSON using the google-gson library.
*
* <p>All non-ascii characters are unicode escaped to comply with {@code AsciiMarshaller}'s character range
* requirements.
*
* @param clazz the type to serialize
* @param <T>
*/
public static <T> Metadata.AsciiMarshaller<T> JSON_MARSHALLER(Class<T> clazz) {
return new Metadata.AsciiMarshaller<T>() {
private TypeToken<T> typeToken = TypeToken.of(clazz);
private Gson gson = new Gson();
@Override
public String toAsciiString(T value) {
try {
try (StringWriter sw = new StringWriter()) {
gson.toJson(value, typeToken.getType(), new UnicodeEscapingAsciiWriter(sw));
return sw.toString();
}
} catch (IOException e) {
throw new IllegalArgumentException(e);
}
}
@Override
public T parseAsciiString(String serialized) {
return gson.fromJson(serialized, typeToken.getType());
}
};
}
@Test
public void jsonMarshallerRoundtrip() {
Foo foo = new Foo();
foo.country = "France";
List<Bar> bars = new ArrayList<>();
Bar bar1 = new Bar();
bar1.cheese = "Brë";
bar1.age = 2;
bars.add(bar1);
Bar bar2 = new Bar();
bar2.cheese = "Guda<>'";
bar2.age = 4;
bars.add(bar2);
foo.bars = bars;
Metadata.AsciiMarshaller<Foo> marshaller = MoreMetadata.JSON_MARSHALLER(Foo.class);
String str = marshaller.toAsciiString(foo);
assertThat(str).doesNotContain("ë");
Foo foo2 = marshaller.parseAsciiString(str);
assertThat(foo2).isEqualTo(foo);
}
@Test
public void jsonMarshallerPrimitiveRoundtrip() {
Metadata.AsciiMarshaller<Integer> marshaller = MoreMetadata.JSON_MARSHALLER(Integer.class);
String s = marshaller.toAsciiString(42);
assertThat(s).isEqualTo("42");
Integer l = marshaller.parseAsciiString(s);
assertThat(l).isEqualTo(42);
}
@Test
public void booleanMarshallerRountrip() {
Metadata.AsciiMarshaller<Boolean> marshaller = MoreMetadata.BOOLEAN_MARSHALLER;
String s = marshaller.toAsciiString(Boolean.TRUE);
assertThat(s).isEqualTo("true");
Boolean b = marshaller.parseAsciiString(s);
assertThat(b).isTrue();
}
@Test
public void longMarshallerRountrip() {
Metadata.AsciiMarshaller<Long> marshaller = MoreMetadata.LONG_MARSHALLER;
String s = marshaller.toAsciiString(42L);
assertThat(s).isEqualTo("42");
Long l = marshaller.parseAsciiString(s);
assertThat(l).isEqualTo(42L);
}
@Test
public void doubleMarshallerRountrip() {
Metadata.AsciiMarshaller<Double> marshaller = MoreMetadata.DOUBLE_MARSHALLER;
String s = marshaller.toAsciiString(42.42);
assertThat(s).isEqualTo("42.42");
Double d = marshaller.parseAsciiString(s);
assertThat(d).isEqualTo(42.42);
}