7

私の目標は、URIの下のすべてが機能することです

https://rest/xyz? 並べ替え= 名前

https://rest/xyz? 並べ替え= 名前

https://rest/xyz? フィルター= 名前 = 値

https://rest/xyz? フィルタ= 名前 = 値

これを実現するために、FilterChain に渡される HttpServletRequest をオーバーライドするカスタム フィルターを作成しました。以下は、このアプローチのリンクです。

http://forum.springsource.org/archive/index.php/t-87433.html

私のコード:

import java.io.IOException;
import java.util.Map;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; 

public class HttpCustomParamFilter implements Filter
{
    private static class HttpServletRequestCustomeWrapper extends HttpServletRequestWrapper
    {
        private String[] parameterValues;

        @Override
        public String[] getParameterValues(String name)
        {
            Map<String, String[]> localParameterMap = super.getParameterMap();

            // Handle case insensitivity of http request paramters like start, count, query, sort, filter etc.
            if (localParameterMap != null && !localParameterMap.isEmpty())
            {
                parameterValues = new String[localParameterMap.size()];
                for (String key : localParameterMap.keySet())
                {
                    if (name.equalsIgnoreCase(key))
                        parameterValues = localParameterMap.get(key);
                    else
                        parameterValues = null;
                }
            }
            return parameterValues;
        }

        public HttpServletRequestCustomWrapper(final ServletRequest request)
        {
            super((HttpServletRequest) request);
        }


    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
        // override the request passed to the FilterChain
        chain.doFilter(new HttpServletRequestCustomWrapper(request), response);
        }

    @Override
    public void init(FilterConfig filterConfig)
            throws ServletException
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void destroy()
    {
        // TODO Auto-generated method stub

    }

}

このコードでは、getParameterValues(String name) メソッドをオーバーライドし、リクエスト パラメータの大文字と小文字を区別しないようにしましたが、他のメソッドをオーバーライドする必要があるかどうかはわかりません。

私の疑問:

  • getParameter() や getParameterNames() などの他のメソッドもオーバーライドする必要がありますか?

  • これにより、どの内部実装が影響を受けますか?

  • getParameter()、getParameterNames()、および getParameterValues() のコード実装を確認できるクラスはどれですか?

4

1 に答える 1