2014-09-09 4 views
1

Я пытаюсь получить доступ к методу покоя с помощью угловой службы. вот мой код для остального метода.Метод запроса «DELETE» не поддерживается весной

@RestController 
@RequestMapping("/api") 
public class UserController { 

    @RequestMapping(value ="/removeUserRole/{roleId}", method = RequestMethod.DELETE) 
    public void removeUserRole(@PathVariable("roleId")Long roleId){ 
     System.out.println("inside delete method"); 
    } 

} 

и вот мой угловой метод обслуживания.

App.factory('manageRoleService', ['$resource', 
    function($resource) { 
     return { 
      getUserRoleDetails: $resource('api/getUserRoleDetails', {}, { 
       query: {method: 'GET', isArray: true} 
      }), 
      removeUserRole: $resource('api/removeUserRole/:roleId', {}, { 
       delete: {method: 'DELETE', params: {id: '@roleId'}} 
      }) 
     }; 
    }]); 

Метод получения работает нормально. но когда я пытаюсь вызвать метод удаления, он дает следующую ошибку.

405 Method Not Allowed

метод запроса 'DELETE' не поддерживается

Что я делаю неправильно здесь. Я попытался выполнить некоторые темы по этой же проблеме, но ничего не помогло.

Заранее спасибо.

+0

Показать, пожалуйста, как StackTrace с сервера по этому вопросу. И было бы здорово, если бы вы включили уровень регистрации INFO для MVC и также показали журналы. –

+0

Это то, что напечатано в журнале сервера 15: 20: 01,603 WARN [org.springframework.web.servlet.PageNotFound] (задание по умолчанию-27) Метод запроса «DELETE» не поддерживается –

+0

Возможно, вы захотите установить уровень журнала для org. springframework.web.servlet, чтобы отлаживать или даже отслеживать и видеть, есть ли там какие-то странные сопоставления. – soulcheck

ответ

1

В вашем шаблоне url DELETE вы используете :roleId placeholder, но позже укажите id имя переменной.

Поскольку деталь после последнего / пуста Весна не может найти правильное отображение.

Изменить

{id: '@roleId'} 

к:

{roleId: '@roleId'} 

Предполагая, что @roleId относится к свойству объекта данных у вас есть - может быть, это должно быть просто @id?

+0

привет, я попытался изменить его, как вы упомянули, но получить ту же ошибку. Затем я включил и изменил его имя параметра на id.but все равно получить ту же ошибку. removeUserRole: $ resource ('api/removeUserRole /: id', {}, { delete: {method: 'DELETE', params: {id: '@id'}} }) –

+0

@ChathruakaWaas Где ваш обработчик GET ? В том же классе? Пожалуйста, опубликуйте его. Также загляните в консоль своего браузера и проверьте, к какому URL-адресу отправлен запрос DELETE. Другой вариант может быть проверен с помощью curl. – soulcheck

1

Я решил, что немного поиграл. Я предполагаю, что это было несоответствие между шаблонами url.

вот мой новый код.

@RestController 
@RequestMapping("/api/role") 
public class RoleController { 

    private static final Logger logger = LoggerFactory.getLogger(RoleController.class); 

    @Autowired 
    private RoleService roleService; 

    @RequestMapping(method = RequestMethod.GET) 
    public List<ModulePermission> getAllRoles(){ 
     return roleService.getModulePermissions(); 
    } 

    @RequestMapping(value = "/{id}",method = RequestMethod.DELETE) 
    public void remove(@PathParam("id") Long id){ 
     logger.info("Deleting the role with id:" + id); 
     roleService.deleteRole(id); 
    } 
} 

App.factory('manageRoleService', ['$resource', 
    function($resource) { 
     return { 
      getUserRoleDetails: $resource('api/role', {}, { 
       query: {method: 'GET', isArray: true} 
      }), 
      removeUserRole: $resource('api/role/:id', {}, { 
       delete: {method: 'DELETE', params: {id: '@id'}} 
      }) 
     }; 
    }]); 

, но теперь, когда я отлаживаю метод останова, кажется, что значение не проходит. Его напечатано как null.

+0

Исправлено с помощью pathVariable вместо pathParam. Спасибо за все советы. –

Смежные вопросы