2014-11-02 2 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 по адресу <hopefullySomething>/{id} (Переменная пути). Но похоже, что вы отправляете запрос DELETE, поэтому некоторый URL-адрес с идентификатором параметра <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; 
      }); 
    }; 

}]); 
Смежные вопросы