2017-10-06 4 views
0

単純な削除を実装するにはどうすればいいですかコントローラの中で、IDと名前の両方で削除できますか?Springブート - 同様の削除要求のマッピング

私は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 

しかし、それは戻って、すべてをもたらします...

EDIT

私はエントリを削除するコードが間違っていると思います。

私は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

そして、あなたがあなたの削除クエリが実際に動作していることを確認してい... 'removeStudent(名)'メソッドのコードは、 –

+0

何ですか?多分問題はあなたのサービス+リポジトリにあり、あなたのコントローラにはありません...コードをデバッグしようとしましたか? – davioooh

+0

何か問題がありますか? stacktraceを共有していただけますか? – VelNaga

答えて

0

問題は確かにあなたのremoveStudent(String name)実装です。ハッシュマップはあなたが意図した通りに動作しません。コメントに記載されているように、マップの要素は、この場合はIntegerのキーを使用して削除できます。

特定の名前を持つすべての学生を削除するには、HashMap(Java 7で実行している場合)またはlambda関数(Java 8を使用している場合)でIteratorを使用し、指定された名前

例(Javaの8):

students.stream() 
.filter(student -> name.equals(student.getName()) 
.forEach(matching -> students.remove(matching)); 
関連する問題