java - 如何使用 Spring MVC 处理 HTTP OPTIONS?

标签 java http spring-mvc http-options-method

我想通过我的 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/

相关文章:

java - 提供静态资源时出现请求方法 GET 不支持错误

java - 无法替换批处理文件中的参数值 - PostBuildScript 插件 Jenkins

java - 使用 @PropertySource 访问 @Lazy 初始化的 @Bean 的公共(public)属性

javascript - AngularJS 变量无法解析/显示

java - spring:如何定义属性文件位置优先级?

java - 当登录页面除了用户名和密码之外还有更多字段时,如何实现 Spring 安全性?

java - IP 地址问题 java 在 Web 浏览器中部署(使用 dtjava.js 部署)

java - 对象引用未保存的 transient 实例 - 在刷新 hibernate JPA 之前保存 transient 实例

http - 为什么 FutureBuilder snapshot.data 返回 "Instance of Post"而不是 json?

javascript - 服务器轮询的替代方案?