ジャージバージョン 1.17.1 + tomcat 7.0.39 + Spring MVC 3.2.1 を使用しています。
問題は、GET ハンドラーの @Path を拡張すると PUT ハンドラーが動作しなくなる理由を理解できないことです。
Spring MVC コントローラーでの次の構成/マッチングは、期待どおりに機能します。
@GET
@Path("/{id}") // <--- WORKS!
[...]
@PUT
@Path("/{id}") // <--- WORKS!
[...]
しかし、GETハンドラーのマッチングを拡張するたびに、処理できるようにするだけでなく、
/anyId
リクエストだけでなく、フォームのリクエストも
/anyId/
/anyId/anyfile.ext
その後、PUT マッチングが機能しなくなることに触れていません。
@GET
@Path("/{id:.*[^/]}{fileName:.*}") // <--- WORKS!
[...]
@PUT
@Path("/{id}") // <--- Not working any longer:
// "405 Method Not Allowed"
[...]
GET パスの一致を上記の一致に変更した後、PUT 要求は「405 Method Not Allowed」ステータス コードを取得します。
最初のケースのように GET パスを単純化すると、PUT ハンドラーが再び機能し始めます。
ジャージーのバグか何か?