私の目標は以下のすべての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(文字列名)メソッドをオーバーライドして、要求偶然にした場合、非感受性を達成しているが、他の方法をオーバーライドする必要があるかどうかはわかりません。
私の疑問:
は私がのgetParameter()およびgetParameterNamesメソッド()のように、他のメソッドをオーバーライドする必要がありますか?
この内部実装はどのような影響を受けますか?
このクラスは、getParameter()、getParameterNames()、getParameterValues()のコード実装を見ることができますか?
あなたがここで問題を抱えていると、混乱しないようにするための1つの解決策があります。 – fge