【发布时间】:2020-02-22 14:10:29
【问题描述】:
我需要修改 URI 路径变量。即每当我收到请求
"/api/stories/27/comments/32",应该转换成"/api/stories/27/comments/323322X"
我已使用过滤器通过以下指定方法修改请求 URI:
@Component
public class HashIDFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
if (request.getRequestURL().toString().contains("/comments/")) {
HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(request) {
@Override
public String getRequestURI() {
System.out.println("orig url:" + request.getRequestURL().toString());
String arr[] = request.getRequestURL().toString().split("/comments/");
String url = arr[0] + "/comments/" + "3442424/";// HashIdSimple.decode(arr[1]);
System.out.println("url:" + url);
return url;
}
};
request.getRequestDispatcher(requestWrapper.getRequestURI()).forward(request, response);
} else {
System.out.println("req");
chain.doFilter(req, res);
}
}
}
报以下指定错误:
{
"timestamp": "2019-10-26T14:32:19.932+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/api/stories/27/comments/32"
}
我试过用
代替 RequestDispatcherchain.doFilter(requestWrapper, response);
仍然没有运气,因为它仅调用值为 32 的 API,即仅以前的值。请指导我解决此问题。
期望传入的请求 URI 应该在新的 URI 请求中得到修改,并且应该调用相应的 API。
【问题讨论】: