2017-10-06 2 views
0

Wie würde man eine einfache Löschung Rest Anforderung im Controller so implementieren, dass ich sowohl durch ID und Name löschen kann?Spring Boot - Mapping ähnliche Anfragen für das Löschen

Ich habe versucht, die This StackOverflow question zu emulieren, aber bisher ohne Glück. Bitte beachten Sie den nachfolgenden Code.

Löschen nach ID funktioniert perfekt, aber beim Versuch, mit Namen zu löschen - nichts funktioniert.

Ich versuchte nur den bestimmten Datensatz für einen Namen mit dem folgenden gemäß der vorherigen Frage erwähnt zu löschen:

http://localhost:8080/students?name=FOUR 

Aber es bringt alles zurück ...

EDIT

Ich glaube, dass der Code zum Entfernen des Eintrags falsch ist.

Ich bin versucht, einen Eintrag aus einem HashMap zu entfernen:

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

Und haben Sie festgestellt, dass Ihre Lösch-Abfrage tatsächlich funktioniert ... –

+0

was ist der Code von 'removeStudent (Name)' Methode? Vielleicht liegt das Problem in Ihrem Service + Repository und nicht in Ihrem Controller ... haben Sie versucht, Ihren Code zu debuggen? – davioooh

+0

Erhalten Sie einen Fehler? Könnten Sie bitte den StackTrace teilen? – VelNaga

Antwort

0

Das Problem ist in der Tat Ihre removeStudent(String name) Umsetzung. Hashmaps funktionieren nicht so, wie Sie es beabsichtigen. Wie in den Kommentaren erwähnt, kann ein Element aus einer Karte mit dem Schlüssel entfernt werden, der in diesem Fall vom Typ Integer ist. Ein Ansatz, um alle Schüler mit einem bestimmten Namen zu entfernen, wäre die Verwendung eines Iterators auf der HashMap (wenn Sie mit Java 7 arbeiten) oder einer Lambda-Funktion (wenn Sie Java 8 verwenden), um den tatsächlichen Schüler zu finden der angegebene Name

Beispiel (Java 8):

students.stream() 
.filter(student -> name.equals(student.getName()) 
.forEach(matching -> students.remove(matching)); 
Verwandte Themen