Mục tiêu của tôi là tất cả bên dưới URI sẽ hoạt độngTham số yêu cầu chuỗi truy vấn phân biệt chữ hoa chữ thường
https: // rest/xyz? sắp xếp = name
https: // rest/xyz? Sắp xếp = name
https: // rest/xyz? bộ lọc = name = value
https: // rest/xyz? Bộ lọc = name = value
Để đạt được điều này, tôi đã tạo bộ lọc tùy chỉnh ghi đè lên HttpServletRequest được chuyển đến Bộ lọcChọn. Dưới đây là liên kết cho cách tiếp cận này:
http://forum.springsource.org/archive/index.php/t-87433.html
Mã của tôi: getParameterValues
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
}
}
Trong mã này, tôi đã overriden (String name) phương pháp và đạt được trường vô cảm của yêu cầu paramters, nhưng không chắc chắn nếu tôi cần phải ghi đè lên bất kỳ phương pháp khác.
nghi ngờ của tôi:
làm tôi cần phải ghi đè lên các phương pháp khác cũng như getParameter() và getParameterNames()?
việc triển khai nội bộ nào bị ảnh hưởng với điều này?
lớp nào tôi có thể thấy việc triển khai mã getParameter(), getParameterNames() và getParameterValues ()?
Với những vấn đề bạn có ở đây, có một giải pháp duy nhất là _sure_ không gây rối mọi thứ: sử dụng bố cục. – fge