Этот вопрос уже старый, но я думаю, что могу внести свой вклад в любом случае.
Как указывал StaxMan, это связано с удалением типа.Это определенно должно быть возможным, потому что вы можете получить общие аргументы посредством отражения из определения метода.Однако проблема заключается в API HttpMessageConverter :
T read(Class<? extends T> clazz, HttpInputMessage inputMessage);
Здесь только метод List.class будет передан методу.Таким образом, как вы можете видеть, невозможно реализовать HttpMessageConverter, который вычисляет реальный тип, глядя на тип параметра метода, поскольку он недоступен.
Тем не менее, можно кодировать собственный обходной путь -вы просто не будете использовать HttpMessageConverter.Spring MVC позволяет вам написать свой собственный WebArgumentResolver , который запускается раньше, чем стандартные методы разрешения.Например, вы можете использовать свою собственную пользовательскую аннотацию (@JsonRequestBody?), Которая напрямую использует ObjectMapper для анализа вашего значения.Вы сможете предоставить тип параметра из метода:
final Type parameterType= method.getParameterTypes()[index];
List<ActionImpl> result = mapper.readValue(src, new TypeReference<Object>>() {
@Override
public Type getType() {
return parameterType;
}
});
Не совсем так, как предполагалось использовать TypeReference, я полагаю, но ObjectMapper не предоставляет более подходящий метод.