2011-09-10 13 views
0

JavaScriptからPUTを使用してパラメータをSpringアプリケーションに送信しようとしています。PUTを使用し、POSTを使用しないSpringおよびExtJS「400 Bad Request」

@RequestMapping(value = "toggle-paid-action", method = RequestMethod.PUT) 
@ResponseBody 
public final String togglePaid(@RequestParam final int year, 
    @RequestParam final String docType, @RequestParam final int number) { 

そして、ここでそれらのパラメータを送信することになっているJavaScriptのスニペット:ここでは春のコントローラで@RequestMappingです。

Ext.Ajax.request({ 
    params: {year: year, docType: docType, number: number}, 
    url: 'toggle-paid-action', 
    method: 'PUT', 

はしかし、私は「)(クライアントから送信された要求文法的に間違っていた」「400不正な要求」の記述により、すべての時間が得られます。

私がFirebugでチェックすると、PUTタブにすべてのパラメータがあり、パラメータのスペルは正しく表示されます。

PUTは@PathVariableパラメータに制限されているのですか、それともPOSTのようなパラメータも送信できますか?

+0

[この質問](http://stackoverflow.com/questions/5521173/spring-framework-enable-put-method)にチェックを入れましたか?これは 'int/Integer'ではなく' String'かモデルクラスを使うことを示唆し、デフォルトメソッドについての情報を提供します。 – sjngm

答えて

2

サーブレットAPIに制限があるため、リクエストメソッドPUTを使用してパラメータをSpringに渡すことはできません。あなたは、安心してサービスを実装し、リクエストボディとしてデータを渡すPUTメソッドでしか動作できません。他の場合(Spring MVC Databindingのように)PUTは動作しません。 SpringMVC is not recognizing request body parameters if using PUT

JIRAを参照してください :上記の示唆、 https://jira.springsource.org/browse/SPR-7414

+0

興味深いことに、これはサーブレットAPIの制限ですが、HTTPプロトコルでは可能です。私は@ RequestBodyで実験します、ありがとうございます。 – stivlo

0

これを通り、spring/servlet APIのバグのようです。実際には、PUTのリクエストは、Request Body (or payload)で動作し、リクエストパラメータでは動作しません。その意味で、サーブレットAPI &春の処理は正しいです。

これは、あなたのjavascript/jQuery呼び出しからのデータ要素を渡さずにパラメータをURL自体の一部として渡すことが、より簡単で簡単に回避できるということです。つまり、GETコールで行うように、urlフィールドにパラメータを設定します。

$.ajax({ 
      url: "yoururl" + "?param1=param2Val&..", 
      type: "PUT", 
      data: "", 
      success: function(response) { 
       // .... 
      } 
    }); 

これは単純なパラメータで動作するようになりました。複雑なJSONタイプではうまくいきません。お役に立てれば。