Spring ControllerマッピングでURLパラメータをどのように受け取りますか


96

この問題はささいなことのようですが、適切に機能させることができません。Springコントローラーマッピングをjquery ajaxで呼び出しています。someAttrの値は、URLの値に関係なく、常に空の文字列です。理由を教えてください。

-呼び出されたURL

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

-コントローラーマッピング

@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".
}

回答:


157

@RequestParam代わりに使用する必要があります@ModelAttribute。例えば

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

@RequestParam必要に応じて、完全に省略することもできます。Springはそれがそうであると想定します。

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

22

@RequestParam追加のオプション要素で使用するための多くのバリアントがあります。例えば、

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

入れないと required = false -デフォルトではparamが必要になります。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.