Есть ли способ получить универсальный тип коллекции в методе support () из AbstractHttpMessageConverter в Spring? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь создать конвертер сообщений CSV для использования с конвертерами сообщений Spring, но я не могу настроить метод support(Class<?> clazz), когда clazz имеет тип Collection. По сути, моя конечная точка REST возвращает Collection объектов напрямую, а не внутри другого объекта.

Используя отражение, единственное, что я могу получить как тип Collection, это E, что, очевидно, не дает мне много работы.

Я пробовал вручную, а также с помощью вспомогательных инструментов, таких как TypeUtils.genericArrayType(clazz) из Apache Commons. Единственное, что я могу обойти, - это всегда возвращать true и проверять тип внутри метода writeInternal(Object o, HttpOutputMessage message).

Это ошибка в реализации класса AbstractMessageConverterMethodProcessor, который возвращает тип возврата конечной точки, или я что-то упустил?

Кстати, это метод, который возвращает тип в реализации Spring?

protected Class<?> getReturnValueType(Object value, MethodParameter returnType) {
    return (value != null ? value.getClass() : returnType.getParameterType());
}

1 Ответ

0 голосов
/ 06 сентября 2018

Ну, я думаю, что нашел ответ. И в основном Java's type erasure удаляет информацию о типе Collection во время выполнения. Есть еще один абстрактный класс AbstractGenericHttpMessageConverter, который позволяет мне реализовывать методы public boolean canWrite(Type type, Class<?> clazz, MediaType mediaType) и protected void writeInternal(Object o, Type type, HttpOutputMessage outputMessage), которые содержат аргумент Type, который можно использовать для точного определения Class объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...