如何在Controller中实现一个简单的删除Rest请求,以便我可以按ID和名称删除?
我曾尝试过This StackOverflow question,但到目前为止没有运气。请参阅下面的代码。
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public void removeStudent(@PathVariable("id") int id){
studentService.removeStudent(id);
}
@RequestMapping(method = RequestMethod.DELETE)
public void removeStudent(@RequestParam(value="name") String name){
studentService.removeStudent(name);
}
按ID删除效果很好,但是当尝试按名称删除时 - 没有任何作用。
我试图按照前面提到的问题删除名称的特定记录,其中包含以下内容:
http://localhost:8080/students?name=FOUR
但它带来了一切......
修改
我相信我删除条目的代码不正确。
我正在尝试从HashMap中删除一个条目:
private static Map<Integer, Student> students;
static {
students = new HashMap<Integer, Student>(){
{
// int id, String name, String school, String course
put(1, new Student(1,"Adam", 24, "School1", "Physics"));
put(2, new Student(2,"Luke", 27, "School1", "Electronics"));
put(3, new Student(3,"Mick", 56, "School1", "Trains"));
}
};
}
@Override
public void removeStudent(String name) { this.students.remove(name); }
答案 0 :(得分:0)
问题确实是您的removeStudent(String name)
实施。哈希映射无法按照您的预期运行。如评论中所述,可以使用密钥删除地图中的元素,在这种情况下,密钥类型为Integer
。
删除具有特定名称的所有学生的一种方法是使用HashMap上的Iterator(如果使用Java 7运行)或lambda函数(如果您使用的是Java 8)并找到具有该名称的实际学生指定名称。
示例(Java 8):
students.stream()
.filter(student -> name.equals(student.getName())
.forEach(matching -> students.remove(matching));