我想要那个方法:
@DeleteMapping("/todos/{id}")
public ResponseEntity deleteToDo(
@PathVariable("id") Long itemId,
Principal principal
) {
ObjectNode jsonObject = mapper.createObjectNode();
User currentUser = userService.findLoggedInUser(principal);
if (toDoItemService.toDoExists(itemId)) {
ToDoItem toDoFromDb = toDoItemService.getToDoItemById(itemId);
if (toDoItemService.canUserAccessToDo(toDoFromDb, currentUser)) {
toDoItemService.deleteToDo(itemId);
return new ResponseEntity(HttpStatus.NO_CONTENT);
} else {
jsonObject.put("status", "You can only delete your ToDos");
return new ResponseEntity<>(jsonObject, HttpStatus.FORBIDDEN);
}
} else {
jsonObject.put("status", "ToDo with that ID doesn't exist.");
return new ResponseEntity<>(jsonObject, HttpStatus.NOT_FOUND);
}
}
仅在网址中有{id}时才有效。现在,当我执行DELETE @ / todos /它从数据库中删除所有ToDos时 - 我不知道为什么,因为在此行if (toDoItemService.toDoExists(itemId))
返回false之后它应该返回&#34;带有该ID的ToDo没有& #39; t存在&#34;但它会删除所有ToDos。
以下是 toDoExists 方法:
public boolean toDoExists(Long id) {
if (toDoItemRepository.findOne(id) != null) {
return true;
}
return false;
}
我该如何解决?我希望用户只能访问DELETE @ / todos / {id},如果他去/ todos /那么他就不会使用&#39;方法&#39;或类似的东西。
答案 0 :(得分:0)
我宁愿把它放在评论中,但我没有足够的代表发表评论:(
你不会碰巧有另一个删除方法(没有路径变量)删除所有待办事项? 因此,当你没有通过路径变量时,它会触及该方法吗? 例如
@DeleteMapping("/todos")
public ResponseEntity deleteTodos(){ service.deleteAll(); return... }