70

URLでGETパラメータを処理するようにRequestMappingを作成する方法は? たとえば、私はこのURLを持っています

http://localhost:8080/userGrid?_search=false&nd=1351972571018&rows=10&page=1&sidx=id&sord=desc

(jqGrid から)

私の RequestMapping はどのように見えるべきですか? HttpReqest を使用してパラメーターを取得したい

これを試しました:

@RequestMapping("/userGrid")
    public @ResponseBody GridModel getUsersForGrid(HttpServletRequest request)

しかし、うまくいきません。

4

6 に答える 6

134

メソッド引数で@RequestParamを使用して、Spring がそれらをバインドできるようにします。また、@RequestMapping.params配列を使用して、Spring が使用するメソッドを絞り込みます。サンプルコード:

@RequestMapping("/userGrid", 
params = {"_search", "nd", "rows", "page", "sidx", "sort"})
public @ResponseBody GridModel getUsersForGrid(
@RequestParam(value = "_search") String search, 
@RequestParam(value = "nd") int nd, 
@RequestParam(value = "rows") int rows, 
@RequestParam(value = "page") int page, 
@RequestParam(value = "sidx") int sidx, 
@RequestParam(value = "sort") Sort sort) {
// Stuff here
}

このように、Spring はすべてのパラメーターが存在する場合にのみこのメソッドを実行し、null チェックや関連することからあなたを救います。

于 2012-11-03T20:28:06.083 に答える
32

@RequestMapping次のように追加できます。

@RequestMapping("/userGrid")
public @ResponseBody GridModel getUsersForGrid(
   @RequestParam("_search") String search,
   @RequestParam String nd,
   @RequestParam int rows,
   @RequestParam int page,
   @RequestParam String sidx) 
   @RequestParam String sord) {
于 2012-11-03T20:26:01.977 に答える
17

これにより、リクエストからすべてのパラメータが取得されます。デバッグ目的のみ:

@RequestMapping (value = "/promote", method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView renderPromotePage (HttpServletRequest request) {
    Map<String, String[]> parameters = request.getParameterMap();

    for(String key : parameters.keySet()) {
        System.out.println(key);
        String[] vals = parameters.get(key);
        for(String val : vals)
            System.out.println(" -> " + val);
    }

    ModelAndView mv = new ModelAndView();
    mv.setViewName("test");
    return mv;
}
于 2013-06-10T00:48:55.140 に答える
2

これは私の場合に機能します:

@RequestMapping(value = "/savedata",
            params = {"textArea", "localKey", "localFile"})
    @ResponseBody
    public void saveData(@RequestParam(value = "textArea") String textArea,
                         @RequestParam(value = "localKey") String localKey,
                         @RequestParam(value = "localFile") String localFile) {
}
于 2017-03-02T09:06:20.097 に答える
0

一種のテンプレートを に書き込む必要があります@RequestMapping:

http://localhost:8080/userGrid?_search=${search}&nd=${nd}&rows=${rows}&page=${page}&sidx=${sidx}&sord=${sord}

次に、次のようにビジネス メソッドを定義します。

@RequestMapping("/userGrid?_search=${search}&nd=${nd}&rows=${rows}&page=${page}&sidx=${sidx}&sord=${sord}")
public @ResponseBody GridModel getUsersForGrid(
@RequestParam(value = "search") String search, 
@RequestParam(value = "nd") int nd, 
@RequestParam(value = "rows") int rows, 
@RequestParam(value = "page") int page, 
@RequestParam(value = "sidx") int sidx, 
@RequestParam(value = "sort") Sort sort) {
...............
}

したがって、フレームワークは${foo}適切な にマップされます@RequestParam

sort は asc または desc のいずれかになる可能性があるため、列挙型として定義します。

public enum Sort {
    asc, desc
}

Spring は列挙型を非常にうまく処理します。

于 2012-11-03T20:23:16.650 に答える