にマッピングされません私はCrudControllerと呼ばれる、私はすべての私の基本的なCRUDコントローラの継承私の最新のWebアプリケーションプロジェクトのための基本春のコントローラを作成しました:継承コントローラメソッドはRequestMapping
class CrudController<T, K extends Serializable>
Tでありますエンティティタイプ、Kはそのタイプに使用されるキーです(SpringのCrudRepositoryに必要なパラメータはかなりです)。私はそうのように、それを拡張することで、残りのコントローラを作成します。
@RestController
@RequestMapping(path = "/hats")
public class HatController extends CrudController<Hat, Integer> {
}
すべてが項目、/hats
のリストを取得する方法を除いて、素晴らしい作品。この方法では、405 Method Not Allowedを取得します。起動時に行われたログを見ると、RequestMappingHandlerMappingが{[/hats],methods=[GET]}
にマップされていないことがわかりますが、コントローラの他の4つのメソッドをマップしています。ここでマップされていないメソッドのコードは次のとおりです。
@RequestMapping(method = RequestMethod.GET)
public HttpEntity<?> getAll() {
Iterable<T> result = controllerRepository.findAll();
return new ResponseEntity<Object>(result, HttpStatus.OK);
}
多くの実験の後、私は方法は意志、私はクラス・パラメータの種類の一つであるのgetAllメソッドにパラメータを追加する場合ことを発見しましたマップされます。この非常に類似したコードをチェックアウト:その小さなコード変更に伴い
@RequestMapping(method = RequestMethod.GET)
public HttpEntity<?> getAll(K dontuse) {
Iterable<T> result = controllerRepository.findAll();
return new ResponseEntity<Object>(result, HttpStatus.OK);
}
を、/find
呼び出しが正常に動作します。私はそこにダミーのパラメータを保持することができ、すべてがうまくいくが、においがする。
アイデア?問題を複製簡素化プロジェクトは、ここで見つけることができます:
これはすばらしいトラブルシューティングです。+1 – dimitrisli