2011-04-02 11 views
5

サーバに送信されたPUTリクエストをキャプチャする際に問題が発生しました。Spring Framework、PUTメソッドを有効にする

これらは私のメソッドです:

@RequestMapping(method= RequestMethod.GET) 
public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
    System.out.println("get request"); 
    return "index"; 
} 


@RequestMapping(method= RequestMethod.PUT) 
public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
    System.out.println("put request"); 
    return "index"; 
} 

私が呼び出しをトレースしたとき、私のPUT要求は、それが常に得る」と読み、アウト画面上..私のクラスでは、GETメソッドではなくPUTメソッドによって処理されました要求"。私はブラウザのログをチェックして、正しいPUTリクエストを送信したことを確認していますので、ここでいくつかのSpringの設定を見逃してしまったと思いますが、何か分かりません。

ありがとうございます。

EDIT:クラスでの追加コード:

@Controller 
@RequestMapping(value="/retail/{cid}/master/city") 
public class City { 

    @RequestMapping(value="/foo1", method= RequestMethod.GET) 
    public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
     System.out.println("get request"); 
     return "index"; 
    } 

    @RequestMapping(value="/foo2", method= RequestMethod.PUT) 
    public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
     System.out.println("put request"); 
     return "index"; 
    } 
} 

EDIT2: 申し訳ありませんが、私が二回、この警告をキャッチ...ログを調べるとき、私は非常に徹底しなかったようです。

WARNING: Error in annotation processing: java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor

どのように修正するのですか?

+0

'getCity'が呼び出されている場合、そのリクエストは' GET'メソッドです。追加の設定は不要ですが、間違った種類のリクエストを送信する必要があります。あなたのクライアントが正しいことをしていると確信していますか? – skaffman

+0

はい。クライアントが正しいことをしていると確信しています。コンソールにログインしていました。クロムとfirefoxで試して、両方のPUT要求を送信しました。 – Magician

+0

'getCity'に' HttpServletRequest'パラメータを追加し、 'request.getMethod()'をログに記録し、それが何であるかを見てください。 – skaffman

答えて

3

...これは、あなたが@RequestBody String stateを使用することができ

 
@Controller 
@RequestMapping(value="/retail/{cid}/master/city") 
public class City { 

    @RequestMapping(method= RequestMethod.GET) 
    public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
    System.out.println("get request"); 
    return "index"; 
    } 

    @RequestMapping(method= RequestMethod.PUT) 
    public String putCity(@PathVariable(value="cid") String cid, @RequestBody CityData state, Model model) { 
    System.out.println(state.getState()); 
    return "index"; 
    } 
} 
 
public class CityData { 
    private String state; 
    public String getState() { 
    return this.state; 
    } 
    public void setState(String state) { 
    this.state = state; 
    } 
} 

の作品改定方法であるが、上記のサンプルは唯一、私のコードの単純化しすぎているので、私はCityDataオブジェクトを作成することを好みます

1

マッピング値を指定していないことが原因です。 @RequestMapping(value="/foo", ...GET)@RequestMapping(value="/foo", ...PUT)がそれぞれ

ドキュメントは書いてみてください。あなたが(明示的なパスマッピングなし)単一のデフォルトの方法を持っている場合は

、見つからより具体的なマッピングされた方法のないすべての要求は、それに派遣されます。このようなデフォルトのメソッドが複数ある場合は、その中から選択するためにメソッド名が考慮されます。

エラーについて - あなたのクラスパスにアオパランスジャーを追加する必要があります。それが解決され

+0

クラスレベルでのみマッピングを定義しました。このメソッドは要求を処理します。 – Magician

+0

@Rudy Dajohまあ、それを試してください - それはどのメソッドを呼び出すかを選択する際の問題かもしれません。 – Bozho

+0

私は '@ RequestParam'を使ってテストしましたが、呼び出されたものはgetCityでしたが、すべてのパラメータを削除するとパラメータなしでputCityが正しく呼び出されました。私はHttpServletRequestを使用してパラメータをキャプチャすることはできません。 '@ RequestParam'を使って' invalid request'エラーが発生しました。なぜなら、putCityが失敗しgetCityが呼び出された理由かもしれませんし、Javaが要求から何らかのパラメータを取得できなかったからです。私はRoRでデータをキャプチャしようとしましたが、RoRはすべてのフォームデータを正しく受信できました。だから、問題はJavaにあると確信しています。 – Magician

関連する問題