请求方法'删除' Spring不支持

时间:2014-09-09 09:35:08

标签: angularjs spring

我试图通过角度服务访问rest方法。这是我的休息方法的代码。

@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");
    }

}

这是我的angularJs服务方法。

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'}}
            })
        };
    }]);

get方法正常。但是当我尝试调用delete方法时,它会出现以下错误。

405方法不允许

请求方法'删除'不支持

我在这里做错了什么。我尝试在同一个问题上关注一些线索,但没有任何帮助。

提前致谢。

2 个答案:

答案 0 :(得分:1)

在您的DELETE网址模板中,您使用的是:roleId占位符,但稍后会提供id变量名称。

由于最后/之后的部分为空,因此Spring无法找到正确的映射。

更改

 {id: '@roleId'}

为:

 {roleId: '@roleId'}

假设@roleId引用您拥有的数据对象的属性 - 也许它应该只是@id

答案 1 :(得分: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'}}
            })
        };
    }]);

但现在当我调试rest方法时,似乎值没有通过。它打印为null。