JsonCodecFactory { public <T> JsonCodec<T> jsonCodec(Class<T> type) { requireNonNull(type, "type is null"); return new JsonCodec<>(createObjectMapper(), type); } JsonCodecFactory(); @Inject  JsonCodecFactory(Provider<ObjectMapper> objectMapperProvider);  JsonCodecFactory(Provider<ObjectMapper> objectMapperProvider, boolean prettyPrint); JsonCodecFactory prettyPrint(); JsonCodec<T> jsonCodec(Class<T> type); JsonCodec<T> jsonCodec(Type type); JsonCodec<T> jsonCodec(TypeToken<T> type); JsonCodec<List<T>> listJsonCodec(Class<T> type); JsonCodec<List<T>> listJsonCodec(JsonCodec<T> type); JsonCodec<Map<K, V>> mapJsonCodec(Class<K> keyType, Class<V> valueType); JsonCodec<Map<K, V>> mapJsonCodec(Class<K> keyType, JsonCodec<V> valueType);  }
@Test public void testJsonCodec() { JsonCodec<Person> jsonCodec = jsonCodecFactory.jsonCodec(Person.class); Person expected = new Person().setName("dain").setRocks(true); String json = jsonCodec.toJson(expected); Person actual = jsonCodec.fromJson(json); assertEquals(actual, expected); }
@Test public void testTypeLiteralList() { JsonCodec<List<Person>> jsonCodec = jsonCodecFactory.jsonCodec(new TypeToken<List<Person>>() {}); validateListCodec(jsonCodec); }
@Test public void testTypeLiteralMap() { JsonCodec<Map<String, Person>> jsonCodec = jsonCodecFactory.jsonCodec(new TypeToken<Map<String,Person>>() {}); validateMapCodec(jsonCodec); }