Каков наилучший способ получить многоуровневый вложенный ServletRequest определенного типа из ServletRequestWrapper? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть ServletRequest, который оборачивается несколько раз с помощью javax.servlet.ServletRequestWrapper#ServletRequestWrapper

У меня также есть какой-то метод, где входящий параметр - HttpServletRequest, который является оберткой верхнего уровня ServletRequest.

Есть удобный способ проверить, обернут ли этот входящий ServletRequest какой-то конкретный ServletRequestWrapper - javax.servlet.ServletRequestWrapper#isWrapperFor(java.lang.Class)

Мой вопрос заключается в том, существует ли какой-либо метод (в некоторых Java-библиотеках), который позволяет получить этоконкретный ServletRequestWrapper из входящих HttpServletRequest

Метод, который делает подобные вещи:

    public <T extends HttpServletRequestWrapper> Optional<T> findWrapper(
            HttpServletRequest request, Class<T> type) {
        ServletRequest servletRequest = request;
        HttpServletRequestWrapper wrapper;
        while (servletRequest instanceof HttpServletRequestWrapper) {
            wrapper = (HttpServletRequestWrapper) servletRequest;
            if (type.isAssignableFrom(wrapper.getClass())) {
                return Optional.of((T) wrapper);
            } else {
                servletRequest = wrapper.getRequest();
            }
        }
        return Optional.empty();
    }
...