当前位置: 首页 > 知识库问答 >
问题:

正在测试@RestController,它以spring返回一个页面

权浩邈
2023-03-14

我有这个restcontroller,它返回分页项:

    @GetMapping("/api/items")
    public Page<Item> getPagedItems(Pageable pageable, @RequestParam(defaultValue="") String searchBy, 
            @RequestParam(defaultValue="") String searchValue) {
        Page<Item> pageItem;

        switch (searchBy) {
        case "name" :
            pageItem = itemRepository.findByNameStartingWith(searchValue, pageable);
            break;
        case "description" :
            pageItem = itemRepository.findByDescriptionStartingWith(searchValue, pageable);
            break;  
        default:
            pageItem = itemRepository.findAll(pageable);    
            break;
        }   
        return pageItem;    
    }   

到目前为止,我的MvcTest看起来是这样的:

    @Test
    public void testGetItems() throws Exception{  
      Page<Item> itemPage = itemRepository.findAll(PageRequest.of(0, 20));

      given(itemRepository.findAll(PageRequest.of(0, 20))).willReturn(itemPage)
      this.mvc.perform(get("/api/items")
       .contentType(MediaType.APPLICATION_JSON))
       .andDo(print())
       .andExpect(status().isOk())
       .andExpect(jsonPath("$",hasSize(1)));
    }

我想要这个/api/items请求的内容。它正在返回

java.lang.AssertionError:在org.springframework.test.util.jsonPathExpectationShelper.evaluatejsonPath(jsonPathExpectationShelper.java:290)在org.springframework.test.web.servlet.result.jsonPathResultMatchers.lambda$value$0(jsonPathResultMatchers.java:87)在org.springframework.test.web.servlet.mockmvc$1。在在org.junit.internal.runners.statements.invokeMethod.evalue(invokeMethod.Java:17)在org.springframework.test.context.junit4.statements.runbeforestexecutioncallbacks.evalue(Runbeforestexecutioncallbacks.73)在org.springframework.test.context.junit4.statements.runaftertestexecutioncallbacks.evalue(Runbeforestexecutioncallbacks.83)在.runchild(SpringJunit4ClassRunner.Java:97)在org.junit.runners.ParentRunner$3。run(ParentRunner.Java:290)在org.junit.runners.ParentRunner.Java:290)在org.junit.runners.ParentRunner.runchilds(ParentRunner.Java:71)在org.junit.runners.ParentRunner.Access在org.junit.runners.ParentRunner.Access在org.junit.runners.ParentRunner.Accessl.junit.runner.RemoteStrunner.Runtests(RemoteStrunner.java:538)位于org.eclipse.jdt.internal.junit.runner.runtests(RemoteStrunner.760)位于org.eclipse.jdt.internal.junit.runner.RemoteStrunner.run(RemoteStrunner.java:460)位于org.eclipse.jdt.internal.junit.runner.RemoteStrunner.main(RemoteStrunner.java:206

我该怎么做才能让这个测试成功呢?问题似乎是什么?

如果有帮助的话,我会使用spring安全系统。我已经用@WithMockUser(roles=“admin”)注释了测试类。

共有1个答案

东郭元魁
2023-03-14

当您返回page 作为响应时,响应JSON如下所示:

{
  content: [
    {
      id: 1,
      name: "abc"
    },
    {
      id: 2,
      name: "xyz"
    }
  ],
  pageable: {
    sort: {
      sorted: false,
      unsorted: true
    },
    offset: 0,
    pageSize: 10,
    pageNumber: 0,
    paged: true,
    unpaged: false
  },
  last: true,
  totalPages: 1,
  totalElements: 2,
  size: 10,
  number: 0,
  first: true,
  numberOfElements: 2,
  sort: {
    sorted: false,
    unsorted: true
  }
}

因此,断言路径应该是$.content,就像.andexpect(jsonPath(“$.content”,hasSize(1)));

 类似资料:
  • 我试图测试我的RestController代码(Spring Boot项目),但我总是得到404。以下是我目前掌握的情况: } } 结果总是这样: 我做错了什么?我已经尝试过直接在setUp方法中用标准设置()初始化mockmvc,我还使用了@SpringBootTest和@AutoConfigreMockMvc相结合。 有人有什么有用的提示吗?我使用spring boot 2.1.4。 谢谢

  • 我在Spring Boot服务中有一个rest控制器,如下所示: 我可以让服务生成八位元组流和application/Json,但我的困惑在于出现错误时字节数组的返回类型,在这种情况下,我希望生成Json而不是字节数组 请给我出主意如何解决这个问题

  • 我有base64字符串,我想使用Spring的RESTController在img标记上打印base64图像。 图像不输出。有什么问题?

  • 我有一个Spring MVC控制器,方法如下: 它位于一个开始如下所示的控制器内部: 我使用的是Spring WebMVC 4.1.3和Jackson 2.4.3。我尝试在RequestMapping中添加一个“produces”属性,表示它应该返回JSON。在本例中,发回的Content-Type属性是“application/json”,但仍然没有引用测试字符串。 我可以通过调用JSON库将J

  • 我正在构建我的第一个Spring Boot应用程序。但是我不能正确地得到我的requestMapping控制器的回答。 这是我的主要课程: 这是我的RestController: 如果我看一下日志,我可以看到“/hi”映射: 但是当我访问:http:localhost:8080/hi时,我看到了一个空白页面,我期望看到“Hello World”文本。 为什么我得到一个空白页面? ---编辑----

  • 我正在试用新的Spring 4.0@RestController,以从控制器返回一个简单的文本响应: 当我访问/心跳时,我返回: 结果包括双引号,这是我没有想到的。 当我访问/heartbeat/test时,我会得到一个空响应,但我希望我还活着!文本 使现代化 卷曲-ihttp://myserver.com/rest/heartbeat HTTP/1.1 200 OK内容类型:applicatio