Spring @CrossOrigin不适用于DELETE方法

时间:2017-05-19 10:37:28

标签: spring spring-mvc cors http-delete

Spring @CrossOrigin注释不适用于DELETE方法。

示例代码(在Groovy中):

@CrossOrigin
@RestController
@RequestMapping('/rest')
class SpringController {

    @RequestMapping(value = '/{fileName}', RequestMethod.DELETE)
    void deleteFile(@PathVariable fileName) {
        // logic
    }

}

对于此代码,我得到例外:

  

XMLHttpRequest无法加载http://localhost:8080/rest/filename.txt。没有   '访问控制允许来源'标题出现在请求的上   资源。起源' http://localhost:4200'因此是不允许的   访问。响应的HTTP状态代码为404.

注意:

  • 我在Chrome 58和Postman 4.10.7
  • 中进行了测试
  • 根据https://spring.io/guides/gs/rest-service-cors/所述 默认@CrossOrigin仅允许GET,HEAD和POST跨源 要求。虽然指定@CrossOrigin(methods = [RequestMethod.GET, RequestMethod.DELETE])没有帮助
  • 为简洁起见,我省略了一些代码。实际控制器也有相同映射的GET请求,delete方法有返回类型并产生JSON响应,而我认为不会影响问题的其他小问题。

1 个答案:

答案 0 :(得分:0)

    <target name="get-core-version">
    <exec executable="bash"
        outputproperty="coreVersionTemp"
        failonerror="true">
        <arg value="-c"/>
        <arg value="cat ./Core.java | grep VERSION"/>
    </exec>
    <echo message="&quot;ResultadoIntermedio&quot;: ${coreVersionTemp}"/>
    <!-- <propertyregex property="coreVersionTemp2" input="coreVersionTemp" regexp="&quot;" replace=":" global="true"/> -->
    <script language="javascript">
        var temp = project.getProperty("coreVersionTemp");
        project.setProperty("coreVersionTemp", temp.replaceAll("\"", ":"));
    </script>
    <echo message="&quot;ResultadoIntermedio2&quot;: ${coreVersionTemp}"/>
    <exec executable="bash"
        outputproperty="coreVersion"
        failonerror="true">
        <arg value="-c"/>
        <arg value="echo '${coreVersionTemp}' | cut -d: -f2"/>
    </exec>
    <echo message="Resultado: ${coreVersion}"/>
</target>      
</project>