Jackson et référence de type générique

Je veux utiliser la bibliothèque jackson json pour une méthode générique comme suit:

public MyRequest tester(){ TypeReference<MyWrapper> typeRef = new TypeReference<MyWrapper>(); MyWrapper requestWrapper = (MyWrapper) JsonConverter.fromJson(jsonRequest, typeRef); return requestWrapper.getRequest(); } 
 public class MyWrapper { private MyRequest request; public MyRequest getRequest() { return request; } public void setRequest(MyRequest request) { this.request = request; } } public class MyRequest{ private List myobjects; public void setMyObjects(List ets) { this.myobjects = ets; } @NotNull @JsonIgnore public T getMyObject() { return myobjects.get(0); } } 

Maintenant, le problème est que lorsque j’appelle getMyObject () à l’intérieur de l’object de requête, jackson renvoie l’object personnalisé nested en tant que LinkedHashMap. Y a-t-il un moyen de spécifier que l’object T doit être retourné? Par exemple: si j’ai envoyé un object de type Client, le Client doit être renvoyé de cette Liste?.

Merci.

C’est un problème bien connu avec l’effacement de type Java: T est juste une variable de type et vous devez indiquer la classe réelle, généralement en tant qu’argument Class. Sans ces informations, le mieux est d’utiliser des bornes; et plain T est à peu près le même que «T extend Object». Et Jackson reliera ensuite les objects JSON en tant que cartes.

Dans ce cas, la méthode du testeur doit avoir access à Class et vous pouvez construire

 JavaType type = mapper.getTypeFactory(). constructCollectionType(List.class, Foo.class) 

et alors

 List list = mapper.readValue(new File("input.json"), type);