我试图通过角度服务访问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方法不允许
请求方法'删除'不支持
我在这里做错了什么。我尝试在同一个问题上关注一些线索,但没有任何帮助。
提前致谢。
答案 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。