Pracuję nad projektem, w którym muszę mapować z hierarchicznego Map<String, Object>
, gdzie drugi parametr ma być String
lub Map<String, Object>
. Do tej pory ModelMapper działał niesamowicie, ale mam problem z konkretną konwersją. Biorąc pod uwagę następujące, gdzie Model
jest po prostu interfejs znacznik:Jak mapować z mapy na listę
class Client implements Model {
String firstName;
String lastName;
List<Organization> organizations = new ArrayList<>();
}
Zakładając Organization
implementuje mój interfejs markera Model
ale jest inaczej dowolnie skonstruowane, chciałbym być w stanie przyporządkować następujące do Client
:
Map source = new HashMap(){{
put("firstName", "John"),
put("lastName", "Smith"),
put("organizations", new HashMap(){{
put("0", new HashMap(){{
put("id", "1234");
}});
put("abc", new HashMap(){{
put("id", "5678");
}});
}});
}};
Podsumowując: w jaki sposób można uzyskać, aby modelMapper usuwał klucze map i korzystał z listy wartości tylko podczas przesyłania do usługi organizacji? W przeciwnym razie właściwość organizacji pojawia się pusta. Możesz założyć, że mam dobry powód, by chcieć to zrobić, i zły przykład!
Z góry dziękuję za wejście!
Edit
próbowałem zbudować Converter
że będzie zarządzać konwersji z Map
do Collection<Model>
bezskutecznie. Biorąc pod uwagę:
new Converter<Map, Collection<DataTransportObject>>() {
@Override
public Set convert(MappingContext<Map, Collection<DataTransportObject>> context) {
LOG.debug("Here");
Set<DataTransportObject> result = new HashSet<>();
return result;
}
}
Istnieją dwa problemy z tym:
- Widocznie ModelMapper nie patrzy na dziedziczenia, dlatego kiedy każdy realizacja
Map
jest podane jako źródło, konwerter nie jest prowadzony. Jeśli na przykład zmieniam konwerter, aby zaakceptowaćHashMap
i przekazać jako źródło,HashMap
, to działa. context.getGenericDestinationType()
zwraca klasyList
lubSet
bez informacji ogólnych. Jak zatem ModelMapper zdoła zbudować złożone wykresy modeli w normalnych warunkach?
Wygląda na to, że pytasz o różne rzeczy w różnych częściach pytania. Czy chcesz przekonwertować mapę na instancję 'Client', czy chcesz ją przekonwertować na listę? – VGR
Dana mapa powinna zostać przekonwertowana na instancję 'Client'. Ale w obecnej postaci ModelMapper nie obsłuży własności 'organizacji' i pozostawi ją pustą. Chcę, aby ModelMapper przesunął listę wartości map do właściwości 'organizacji'. – ironhardchaw
Myślę, że potrzebujesz BeanUtils lub ObjectMapper. Możesz zobaczyć odpowiedź w [http://stackoverflow.com/questions/739689/how-to-convert-a-java-object-bean-to-key-value-pairs-and-vice-versa][ 1 ] [1]: http://stackoverflow.com/questions/739689/how-to-convert-a-java-object-bean-to-key-value-parairs-and-vice-versa –