簡體   English   中英

如何為 2 個參數實現單個 DeleteMapping?

[英]How to implement single DeleteMapping for 2 parameters?

我的數據庫中有一個用戶表,其中包含 2 個字段idname 我想創建一個 API 來根據 id 或 name 刪除用戶。 像這樣:

@DeleteMapping(path = "/{name}")
    public ResponseEntity<Object> clearUser(@PathVariable("name") String name){
        myService.deleteUser(name);
        return new ResponseEntity<>(HttpStatus.OK);
    }

@DeleteMapping(path = "/{id}")
    public ResponseEntity<Object> clearUser(@PathVariable("id") int id){
        myService.deleteUser(id);
        return new ResponseEntity<>(HttpStatus.OK);
    }

但我想在一個@DeleteMapping下完成它,我必須只使用路徑參數而不是查詢參數來完成它。 一個人可以輸入 id 或 name 來刪除該用戶。

您可以將兩個路徑變量用作可選變量。

@DeleteMapping(path = {"/{name}", "/{id}")
public ResponseEntity<Object> clearUser(@PathVariable("name") Optional<String> name, @PathVariable("id") Optional<Integer> id){
    myService.deleteByIdOrName(id, name);
    return new ResponseEntity<>(HttpStatus.OK);
}

  MyRepo ...
  void deleteByIdOrName(Optional<Integer> id, Optional<String> name);

  MyService
  void deleteByIdOrName(Optional<Integer> id, Optional<String> name) {
      repo.deleteByIdOrName(id, name);
  }

只需檢查路徑參數類型是數字還是字符串。 基於此,您可以在一種方法下更改實現。 只是一個提示:

    @DeleteMapping(path = "/{user}") 
public ResponseEntity clearUser(@PathVariable("user") String user){ 
       myService.deleteUser(user);    
       return new ResponseEntity<>(HttpStatus.OK);
    }

在實現中,執行以下操作:

使用 Java 的內置 java.text.NumberFormat 對象查看解析字符串后解析器位置是否在字符串的末尾。 如果是,我們可以假設整個字符串是數字:

public static boolean isNumeric(String str) { 
       NumberFormat formatter = 
       NumberFormat.getInstance(); 
       ParsePosition pos = new 
       ParsePosition(0); 
       formatter.parse(str, pos); 
       return str.length() == pos.getIndex(); 
    }
    ....

    if(isNumeric(user)){
       // implement delete by ID
    }else{
       //implement delete by Name
    }

....

希望這會給你一個想法..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM