[英]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.