Вопреки утверждениям @ Евгения, разница здесь в том, что org.eclipse.jetty.server.Request.getHeaderNames()
производит Enumeration<Object>
, что, следовательно, при подаче в Collections.list()
приводит к ArrayList<Object>
, что являетсяПричина, по которой компилятор Java не принимает это.
Приведение конечного результата к (Map<String, String>)
, как предлагает IDE, облегчает жалобу:
Map<String, String> headersMap =
(Map<String, String>)
Collections.list(request.getHeaderNames())
.stream()
.collect(Collectors.toMap(
name -> name,
request::getHeader));
Видимо, страницы, которые я упомянул ( здесь и Фильтр сервлетов: Как получить все заголовки из servletRequest? ), использующие оригинальный метод, без приведения его к Map<String, String>
, прерываются для начала (как предложено @Eugene) или работают по какой-то другой непонятной причине.
Возможно, кто-то может пролить свет на эту тайну.
ОБНОВЛЕНИЯ:
При дальнейшем расследовании, как подсказано комментарием @ StuartMarks, действительно виновником являетсяверсия Jetty используется.Request.getHeaderNames () реализован по-разному между двумя.
Версия 7.6.16 (которую мы использовали) использует перечисление в необработанном виде, вызывая хаос:
, тогда какПричал вер.9.4.7 использует типизированное перечисление:
Это объясняет, почему статья , на которую я ссылался в исходном вопросе, а также другие SO упоминания являются правильными - они просто ссылаются на новую реализацию этого метода.Еще раз спасибо @StuartMarks за указание на это.