在我們的Web應用程序,使用Spring MVC 3.2我們顯示不同的對象多分頁列表,鏈接到列表中的其他頁面的構造是這樣的:請求參數的映射子集的一個對象Spring MVC中
/servlet/path?pageNum=4&resultsPerPage=10&sortOrder=ASC&sortBy=name
儘管URL中還可能有其他請求參數(例如搜索過濾器)。
因此,我們必須控制方法是這樣的:
@RequestMapping(method = RequestMethod.GET, value="/ajax/admin/list")
public String ajaxlistGroups(Model model,
@RequestParam(value="pageNumber",required=false,defaultValue="0") Long pageNumber,
@RequestParam(value="resultsPerPage",required=false,defaultValue="10") int resultsPerPage,
@RequestParam(value="sortOrder",required=false,defaultValue="DESC") String sortOrder,
@RequestParam(value="orderBy",required=false,defaultValue="modificationDate")String orderBy) {
// create a PaginationCriteria object to hold this information for passing to Service layer
// do Database search
// return a JSP view name
}
,所以我們結束了這個笨拙的方法簽名,反覆多次在應用程序,每個方法需要創建一個PaginationCriteria對象來保存分頁信息並驗證輸入。
有沒有辦法自動創建我們的PaginationCriteria對象,如果這些請求參數存在?例如,替換上面:
@RequestMapping(method = RequestMethod.GET, value="/ajax/admin/list")
public String ajaxlistGroups(Model model, @SomeAnnotation? PaginationCriteria criteria,
) {
...
}
也就是說,有沒有在Spring的方式採取定義requestParams的子集,從一個普通的GET請求,並將其轉換爲自動的對象,所以它可用於在使用控制器處理方法?我以前只使用了@ModelAttribute,這在這裏看起來並不正確。
謝謝!
謝謝您的全面解答!您的第一個解決方案符合我的目標,將該對象添加爲請求範圍的bean。 AOP解決方案看起來很有趣,但是我在過去用干擾春季單元測試的方面包裝控制器時遇到了問題......儘管我在3.2版中還沒有嘗試過,現在可能已經修復了。 – otter606