【发布时间】:2011-12-26 00:20:16
【问题描述】:
在客户端,我将 Ajax.post (jquery 1.5) 与 json 一起使用。在服务器端,我使用的是 resteasy-jaxrs-2.0.1.GA。我发现某处我应该在服务器响应中添加几个标头,并且我已经完成了以下过滤器:
public void doFilter( ServletRequest req,
ServletResponse res,
FilterChain filterChain)
throws IOException, ServletException {
MyServletRequestWrapper httpReq = new MyServletRequestWrapper((HttpServletRequest)req);
HttpServletResponse httpRes = (HttpServletResponse)res;
HttpSession session = httpReq.getSession();
httpRes.addHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
httpRes.addHeader(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
if (((HttpServletRequest) req).getMethod().equals("OPTIONS")){
httpRes.addHeader(ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, OPTIONS, PUT, DELETE");
httpRes.addHeader(ACCESS_CONTROL_ALLOW_HEADERS, "content-type, x-requested-with, x-requested-by");
}
filterChain.doFilter(httpReq, httpRes);
}
它工作正常,因为上面的每个 GET 响应都添加了标头。当我想使用 POST 请求时出现问题。当我使用 Ajax.post 时,首先服务器收到 OPTIONS 请求,并且出现以下错误:
Failed executing OPTIONS [REST_PATH]
org.jboss.resteasy.spi.DefaultOptionsMethodException: No resource method found for options, return OK with Allow header
为了解决上述错误,我尝试使用与 POST ([REST_PATH]) 相同的路径但使用 @OPTION 注释添加方法调用。在那种情况下,javac 告诉我找不到符号 :class OPTIONS,即使附加的 jaxrs 库中有一个 OPTION.class。
有什么解决办法吗?如果有任何线索,我将不胜感激。
【问题讨论】:
标签: rest xmlhttprequest http-options-method