This is a duplicate question because the following questions are either messy or they are not answered at all:
deserializing-a-generic-type-with-jackson
jack
If you programmatically pick up the java.lang.reflect.Type from for instance a method return type or a field, then it is easiest to use
Type type = ...;
ObjectMapper mapper = new ObjectMapper();
JavaType javaType = mapper.getTypeFactory().constructType( type );
Object value = mapper.readValue( json, javaType );
A fully nested JavaType is created, so Controller will be deserialzed correctly.