Spring Boot - 映射类似的删除请求

时间:2017-10-06 10:35:22

标签: java spring spring-mvc

如何在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); }

1 个答案:

答案 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));