1

使用最新的 Spring-MVC (3.1.2.RELEASE)

我有一个可分页的 REST 方法,例如:

@RequestMapping(value = "/myThings", method = RequestMethod.GET)
public @ResponseBody
Page<MyThings> findMyThings(@Valid PageRequest pageRequest) {
    Page<MyThings> myThings = myService.findMyThings(pageRequest);
    return myThings;
}

尝试使用 org.springframework.web.client.RestOperations 进行测试。一切正常,尤其是对于不可分页的请求。但是,对于可分页的对象,在 REST 方法中接收到的“pageRequest”对象是由默认构造函数创建的对象,而不是创建并传递给调用的对象。

这是我尝试过的(其中restTemplate是“RestOperations”的一个实例:

    .... // make the pageRequest object
    if (pageRequest != null) {
        params.put("pageRequest", pageRequest);
    }
    String json = restTemplate.getForObject(restEndpoint + "/myThings", 
                    String.class, Collections.unmodifiableMap(params));

我知道问题/问题就在这一边——如果我部署到 Tomcat 并通过 URL 传递 pageRequest 参数,则服务器端的分页可以完美运行。此外,我通过 Spring 代码退出,看起来如果 pageRequest 被放入模型中,它将被拉出,否则将获得默认值,这就是我得到的。

任何人都可以帮忙吗?

谢谢!

4

1 回答 1

1

您传递的 getForObject 参数Collections.unmodifiableMap(params)实际上是Object... urlVariables,其中变量是 @PathVariable 类型声明的占位符,因此这仅适用于您拥有的声明@PathVariables

另一种方法是按照您的方式使用它,但以这种方式支持查询参数:

String json = restTemplate.getForObject(restEndpoint + "/myThings?pagerequest={pageRequest}", 
                    String.class, Collections.unmodifiableMap(params));
于 2012-08-03T12:40:16.677 回答