/** @return the converter for a PropertyMetadata instance */ public <J, D> Converter<J, D> getConverter(SinglePropertyMetadata<J, D> metadata) { Class<J> propertyType = metadata.getPropertyType(); if (metadata.getAnnotation(AsJSON.class) != null) { TypeFactory typeFactory = objectMapper.getTypeFactory(); JavaType type; if (Map.class.isAssignableFrom(propertyType)) { Class[] mapKeyValue = guessMapGenericType(metadata); type = typeFactory.constructMapType(Map.class, mapKeyValue[0], mapKeyValue[1]); } else if (Set.class.isAssignableFrom(propertyType)) { type = typeFactory.constructCollectionType( Set.class, typeFactory.constructType(guessCollectionGenericType(metadata))); } else if (Collection.class.isAssignableFrom(propertyType)) { type = typeFactory.constructCollectionType( List.class, typeFactory.constructType(guessCollectionGenericType(metadata))); } else { type = typeFactory.uncheckedSimpleType(propertyType); } return new JsonConverter(type, objectMapper); } if (Collection.class.isAssignableFrom(propertyType)) { return getCollectionConverter( (Class<? extends Iterable>) propertyType, guessCollectionGenericType(metadata)); } else { return getConverter(propertyType); } }
@Test public void testDeserializeFromJsonO14640() throws Exception { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(ACCEPT_SINGLE_VALUE_AS_ARRAY, true); TypeFactory typeFactory = objectMapper.getTypeFactory(); InputStream inputStream = getClass().getResourceAsStream("/O14640.json"); List<Sequence> sequences = objectMapper.readValue( inputStream, typeFactory.constructCollectionType(List.class, Sequence.class)); assertNotNull(sequences); assertEquals(1, sequences.size()); Sequence s = sequences.get(0); assertEquals(695, s.getLength()); assertEquals(5, s.getRegions().size()); assertEquals(0, s.getMarkups().size()); assertEquals(7, s.getMotifs().size()); assertEquals("uniprot", s.getMetadata().get("database")); }