MockMVC返回406对象列表(对于一个对象测试有效),为什么呢?

时间:2019-08-23 19:50:33

标签: java spring spring-boot

在Spring Boot应用程序中(springBootVersion ='2.1.1.RELEASE'),我有两个ReST端点。一个返回对象,第二个返回对象列表。我尝试使用MockMvc为此端点编写测试。

测试单个对象,按预期方式工作。测试对象列表将返回406而不是200。下面是我的代码,控制器+测试。 单一对象ReST:

@ResponseBody
@RequestMapping(value = {"/example", "/example.html"})
public ResponseEntity<SampleObject> example() {
    SampleObject sampleObj = generateSampleObject();
    return new ResponseEntity<>(sampleObj, HttpStatus.OK);
}

并测试:

@Test
public void shouldCheckExamplePage() throws Exception {
    MvcResult mvcResult = this.mockMvc.perform(get("/example")
    .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
            .andExpect(status().isOk()).andReturn();
}

列表的ReST端点:

@ResponseBody
@RequestMapping(value = {"/", "/index.html"})
public ResponseEntity<List<SampleObject>> all() {
    List<SampleObject> sampleObjectList = generateListOfSampleObject();
    return new ResponseEntity<>(sampleObjectList, HttpStatus.OK);
}

并测试:

@Test
public void shouldCheckHomePage() throws Exception {
    MvcResult mvcResult = this.mockMvc.perform(get("/")
            .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
            .andExpect(status().isOk()).andReturn();
}

有什么区别?为什么对一个对象测试有效,但对列表无效?

已添加: 当我启动应用程序时,在两个端点上的浏览器都可以正常工作。

1 个答案:

答案 0 :(得分:1)

让我们检查一下代码:

  • APPLICATION_JSON_UTF8_VALUE显示您的后端未返回客户端请求的响应。
  • 您的客户(您的测试)要求APPLICATION_JSON_UTF8_VALUE
  • JSON表示内容类型为UTF-8,并以odbcDriverConnect(connection="Driver={SQL Server Native Client 11.0};server=BRDCVMDB01;database=databases;trusted_connection=yes;") 字符编码进行编码

一个可能的原因可能是您的列表响应中有一些未使用UTF-8编码的对象