2011-08-11 12 views
56

この問題は簡単ではありませんが、正しく動作するようにはできません。私はjquery ajaxでSpringコントローラのマッピングを呼び出しています。 someAttrの値は、URLの値に関係なく、常に空文字列です。理由を判断するのを手伝ってください。スプリングコントローラのマッピングでurlパラメータを受け取る方法

-URLあなたは、例えば、@RequestParam代わりの@ModelAttributeを使用する必要があります

http://localhost:8080/sitename/controllerLevelMapping/1?someAttr=6 

-controllerマッピング

@RequestMapping(value={"/{someID}"}, method=RequestMethod.GET) 
public @ResponseBody int getAttr(@PathVariable(value="someID") final String id, 
     @ModelAttribute(value="someAttr") String someAttr) { 
    //I hit some code here but the value for the ModelAttribute 'someAttr' is empty string. The value for id is correctly set to "1". 
} 

答えて

84

と呼ばれます

@RequestMapping("/{someID}") 
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
           String someAttr) { 
} 
8

あなたは追加のオプションの要素で@RequestParamを使用するためのバリエーションがたくさんある、例えば:あなたが選択した場合でも完全に@RequestParamを省略することができ、そして春はそれはそれが何であるかだと仮定します

@RequestMapping("/{someID}") 
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
           @RequestParam String someAttr) { 
} 

@RequestParam(required = false, defaultValue = "someValue", value="someAttr") String someAttr 

required = falseを入力しないと、デフォルトでparamが必要になります。

defaultValue = "someValue" - リクエストパラメータが指定されていないか、値が空の場合にフォールバックとして使用するデフォルト値です。

リクエストとメソッドのパラメータが同じ場合 - 必要ありませんvalue = "someAttr"