繁体   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