2014-11-02 129 views
2

我尝试删除时得到以下响应:405方法不允许。 在我的日志中有写入允许GET,但DELETE不允许。错误405方法不允许错误,发送DELETE到服务器时

的Java:

@ResponseBody 
    @RequestMapping(method = RequestMethod.DELETE, value = "/{id}") 
    public void delete(@PathVariable String id) { 
    speakerService.delete(id); 
    } 

Angularjs

app.factory('SpeakerResource', function ($resource) { 
     return $resource('rest/speaker/:speakerId', 
    { 
     speakerId: '@speakerId' 
    }, 
    { 
     'update': { method: 'PUT' } 
    }, 
    { 
     'delete': { method: 'DELETE', params: { 'id': 'speakerId' }} 

    } 
    ) 
}); 

SpeakerService

this.delete = function (id, callback) { 

    SpeakerResource.delete({ speakerId: id }, function() { 
     callback(); 
    }); 

} 

回答

4

我不知道你完整的代码,而我不是AngularJS的专家,但它看起来像你想发送一个DELETE请求到URL <hopefullySomething>/{id}Path var有效的)。但它看起来像你发送DELETE请求,所以一些URL的参数ID为<hopefullySomething>?id={id}请求参数)。

这个问题和答案解释的路径变量,请求之间的差参数多一点@RequestParam vs @PathVariable

3

使用$ http.delete(),并返回例如状态数据,我只是测试用的弹簧下面,且运行正常

@RequestMapping(value = "delete/{id}", method = RequestMethod.DELETE) 
    public @ResponseBody Status deletePerson(@PathVariable("id") int id) {  
      try { 
       personService.removePerson(id); 
      return new Status(1, "person deleted Successfully !"); 
      } catch (Exception e) { 
      return new Status(0, e.toString()); 
      }  
    } 

angular.module('personService', []) 

.factory('Person', ['$http',function($http) { 
    return { 

     deletePerson: function(id) { 
      return $http.delete('/restperson/delete/'+id); 
     } 
    } 
}]); 

控制器

angular.module('personController', []) 

// inject the person service factory into our controller 
.controller('mainController', ['$scope','$http','Person', function($scope, $http, Person) {  

    //delete 
    $scope.deletePerson = function(id) { 
     Person.deletePerson(id) 
      .success(function(data) { 
       $scope.message = data; 
      }); 
    }; 

}]); 
相关问题