我想通过我的 Controller 使用 Spring MVC 拦截 OPTIONS 请求,但它被 DispatcherServlet 捕获。我该如何处理?
最佳答案
我为初学者的 Bozho 答案添加了更多细节。 有时让 Spring Controller 管理 OPTIONS 请求很有用(例如,设置正确的“Access-Control-Allow-*” header 以服务 AJAX 调用)。 但是,如果您尝试常见的做法
@Controller
public class MyController {
@RequestMapping(method = RequestMethod.OPTIONS, value="/**")
public void manageOptions(HttpServletResponse response)
{
//do things
}
}
因为 DispatcherServlet 会拦截客户端的 OPTIONS 请求,所以它不起作用。
解决方法很简单:
您必须...从您的 web.xml 文件中配置 DispatcherServlet,如下所示:
...
<servlet>
<servlet-name>yourServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
...
添加“dispatchOptionsRequest”参数并将其设置为true。
现在 DispatcherServlet 会将 OPTIONS 处理委托(delegate)给您的 Controller ,然后执行 manageOption() 方法。
希望这会有所帮助。
PS。老实说,我看到 DispatcherServlet 将允许的方法列表附加到响应中。就我而言,这并不重要,我放手了。可能需要进一步检查。
关于java - 如何使用 Spring MVC 处理 HTTP OPTIONS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521690/