[英]How to implement single DeleteMapping for 2 parameters?
我的數據庫中有一個用戶表,其中包含 2 個字段id和name 。 我想創建一個 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.