如何使用Spring MVC处理HTTP OPTIONS?

2022-09-01 13:59:17

我想使用Spring MVC使用我的控制器拦截OPTIONS请求,但它被DispatcherServlet捕获。我该如何管理?


答案 1

我为初学者的Bozho答案添加了更多细节。有时,让 Spring 控制器管理 OPTIONS 请求会很有用(例如,设置正确的“Access-Control-Allow-*”标头来为 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 处理委托给你的控制器,并且 manageOption() 方法将执行。

希望这有帮助。

PS.说实话,我看到DispatcherServlet将允许的方法列表附加到响应中。就我而言,这并不重要,我放手了。也许需要进一步的检查。


答案 2
@RequestMapping(value="/youroptions", method=RequestMethod.OPTIONS)
public View getOptions() {

}

您应该通过将调度程序Servlet设置为dispatchOptionsRequesttrue


推荐