在我们的 web 应用程序中,使用 Spring MVC 3.2 我们显示了许多不同对象的分页列表,并且列表中其他页面的链接构造如下:
/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 中有没有办法从常规 GET 请求中获取定义的 requestParams 子集,并自动将它们转换为对象,以便在 Controller 处理程序方法中使用?我以前只使用过@ModelAttribute,这似乎不正确。
谢谢!