java - 如何使用 Spring RestOperations 在单元测试中发送 PageRequest 对象?

标签 java spring spring-mvc

使用最新的 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 放入模型中,它将被拉出,否则将获得默认值,这就是我所得到的。

有人可以帮忙吗?

谢谢!

最佳答案

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

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

String json = restTemplate.getForObject(restEndpoint + "/myThings?pagerequest={pageRequest}", 
                    String.class, Collections.unmodifiableMap(params));

关于java - 如何使用 Spring RestOperations 在单元测试中发送 PageRequest 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11780046/

相关文章:

java - 找不到这个支架去哪里?

java - spring mvc 路径变量编码

spring - 遍历jsp中的PagedListHolder

java - 两个数字相加链表

java - 多线程 MVC 用多个独立仪表重新创建平面仪表板

java - Android - 无法添加使用 kotlin 在 java8 中创建的 jar

java - 无法在 mybatis+jersey Web 应用程序上集成 spring

java - 列表中的 Freemarker 元素不起作用

ajax - Spring Controller +Ajax返回字符串

json - Spring 休息: HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8'