2017-02-05 40 views
0

我想這個方法:沒有PathVariable控制方法刪除所有entitites

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

只有工作的時候有(編號)在URL中。現在,當我做刪除@/todos /它從數據庫中刪除所有的ToDos - 我不知道爲什麼,因爲在這條線if (toDoItemService.toDoExists(itemId))返回false後,它應該只是返回「用該ID不存在的待辦事項」,而是它將刪除所有待辦事項。

這裏是toDoExists方法:

public boolean toDoExists(Long id) { 
    if (toDoItemRepository.findOne(id) != null) { 
     return true; 
    } 
    return false; 
} 

我怎樣才能解決這個問題?我希望用戶只能訪問DELETE @/todos/{id},如果他去/ todos /那麼他會得到'方法不允許'或類似的東西。

回答

0

我寧願把這個意見,但我沒有足夠的代表處發表評論:(

你不會碰巧有另一個刪除方法(即不具有路徑變量),其全部刪除因此,當您不通過路徑變量時,它會碰到該方法嗎? 例如

@DeleteMapping("/todos") 
public ResponseEntity deleteTodos(){ service.deleteAll(); return... } 
相關問題