Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SpringMVC和AngularJS删除方法_Java_Angularjs_Spring_Rest_Spring Mvc - Fatal编程技术网

Java 使用SpringMVC和AngularJS删除方法

Java 使用SpringMVC和AngularJS删除方法,java,angularjs,spring,rest,spring-mvc,Java,Angularjs,Spring,Rest,Spring Mvc,我有一个RESTfull服务的问题,它应该从数据库中删除记录。在angular with REST请求中调用函数时,我收到FireBug错误消息:“NetworkError:403 Forbidden-”。问题只存在于DELETEmethod-GET,POST-work-fine 角度服务 (function(angular) { 'use strict'; angular.module('dictionaryService', ['ngResource']) .factory('dic

我有一个RESTfull服务的问题,它应该从数据库中删除记录。在angular with REST请求中调用函数时,我收到FireBug错误消息:“NetworkError:403 Forbidden-”。问题只存在于DELETEmethod-GET,POST-work-fine

角度服务

(function(angular) {
'use strict';
angular.module('dictionaryService', ['ngResource'])
    .factory('dictTechnologies', [ '$resource', function($resource) {
        return $resource('http://localhost:8080/sake/dict/technologies/:id', {id: '@id' }, {
            query: {method:'GET', isArray:true},
            create: {method:'POST'},
            delete: {method:'DELETE', params: {id: '@id'}}
        });
    }]).factory('dictDocuments', [ '$resource', function($resource) {
        return $resource('http://localhost:8080/sake/dict/documents/:Id', {Id: "@Id" }, {
            query: {method:'GET', isArray:true},
            create: {method:'POST'},
            delete: {method:'DELETE'}
        });
    }]);
})(window.angular);
$scope.deleteBtn= function() {
        var z = $scope.technologies[1].id; //here is JSON of technologu which I recieved in GET response
        console.log(z);
        dictTechnologies.delete(z).$promise.then(function(z) {
            //if success
        }, function(errResoponse) {

        });
    };
HTML我按下按钮

 <button ng-click="deleteBtn()" class="btn btn-primary btn-xs"> Delete [x] </button>
Java Spring MVC中的控制器为了简化示例,我只需调用System.out.println()


提前感谢您的帮助。

您正在将id作为路径变量传递,但试图将其作为请求参数获取。将您的方法更改为

 @RequestMapping(value = "/technologies/{id}", method = RequestMethod.DELETE)
 public @ResponseBody int deleteTechnology(@PathVariable("id") Integer id) {
        System.out.println(id);
        return 1;
 }
@RequestParam
是一个注释,指示方法参数应绑定到web请求参数,而
@PathVariable
是一个注释,指示方法参数应绑定到URI模板变量。

我找到了解决方案:

我添加到web.xml过滤器并删除工作:

<filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
        <init-param>
            <param-name>cors.allowed.headers</param-name>
            <param-value>Accept,Accept-Encoding,Accept-Language,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Connection,Content-Type,Host,Origin,Referer,Token-Id,User-Agent, X-Requested-With</param-value>
        </init-param>
        <init-param>
            <param-name>cors.allowed.origins</param-name>
            <param-value>*</param-value>
        </init-param>
        <init-param>
            <param-name>cors.allowed.methods</param-name>
            <param-value>GET, POST, PUT, DELETE, OPTIONS, HEAD</param-value>
        </init-param>
    </filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

克斯菲尔特
org.apache.catalina.filters.CorsFilter
cors.allowed.headers
接受、接受编码、接受语言、访问控制请求方法、访问控制请求标头、授权、连接、内容类型、主机、来源、引用者、令牌Id、用户代理、X请求的With
科尔斯
*
cors.methods
获取、发布、放置、删除、选项、标题
克斯菲尔特
/*

同样的错误。在Tomcat的控制台中,看起来他们没有收到任何来自Angular的请求-控制台中没有任何新消息,甚至没有错误。您能否验证您确实发送了有效的
id
,并且您编写的URL是正确的?由于GET方法工作正常,我假设配置正常,并且您的DELETE映射也正常,所以问题可能出在客户端发出请求上。FireBug中的网络信息:HTTP/1.1 403禁止服务器:Apache Coyote/1.1内容类型:text/plain内容长度:0日期:Fri,2015年3月6日20:22:10 GMT选项/sake/dict/technologies HTTP/1.1主机:本地主机:8080用户代理:Mozilla/5.0(Windows NT 6.3;WOW64;rv:36.0)Gecko/20100101 Firefox/36.0接受:text/html、application/xhtml+xml、application/xml;q=0.9,/;q=0.8接受语言:pl、en-US;q=0.7,en;q=0.3接受编码:gzip,deflate-Origin:Access-Control请求方法:DELETE-Connection:keep-alive和from-console.log(z)return:2您可以尝试通过任何Rest客户端直接访问URL()吗?无论如何,您将得到403禁止,这意味着可以访问并理解来自客户端的请求,但服务器拒绝采取任何进一步的操作。您有任何特定的安全配置、头吗?我安装了HTTP资源测试,这就是工作。所以我的棱角分明的客户出了问题。嗯,也许是CORS政策的问题,但是GET和POST工作。在web.xml中,我有配置CorsFilter/*
@RequestMapping(value = "/technologies/{id}", method = RequestMethod.DELETE)
        public @ResponseBody int deleteTechnology(@RequestParam("id")/* @PathParam("id")*/ Integer id) {
            System.out.println(id);
            return 1;
        }
 @RequestMapping(value = "/technologies/{id}", method = RequestMethod.DELETE)
 public @ResponseBody int deleteTechnology(@PathVariable("id") Integer id) {
        System.out.println(id);
        return 1;
 }
<filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
        <init-param>
            <param-name>cors.allowed.headers</param-name>
            <param-value>Accept,Accept-Encoding,Accept-Language,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Connection,Content-Type,Host,Origin,Referer,Token-Id,User-Agent, X-Requested-With</param-value>
        </init-param>
        <init-param>
            <param-name>cors.allowed.origins</param-name>
            <param-value>*</param-value>
        </init-param>
        <init-param>
            <param-name>cors.allowed.methods</param-name>
            <param-value>GET, POST, PUT, DELETE, OPTIONS, HEAD</param-value>
        </init-param>
    </filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>