【问题标题】:MvcResult returns application/json;charset=UTF-8MvcResult 返回 application/json;charset=UTF-8
【发布时间】:2021-08-31 01:47:24
【问题描述】:

这是我第一次尝试使用 spring 框架测试编写集成测试。控制器在 Postman 中返回正确的响应,但 MvcResult 返回“application/json;charset=UTF-8”作为响应。我尝试了互联网上存在的不同解决方案,但似乎没有任何效果。请帮帮我。

我想从 JSON 响应中提取键值对。

春季测试 = 5.1.8.RELEASE

控制器

@RestController
public class CustAuController {
    @RequestMapping(value = "/retrieve_something", method = RequestMethod.GET)
    retrieveSomething(){
    }
}

邮递员回复

{
    "total_count" : 3,
    "data" : {
        "list" : [
                   {
                        ...
                   }
                 ]
  }
}

测试类

 @SpringBootApplication
 @SpringBootTest(classes = ServiceApplication.class)
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 class ControllerTest {

@Autowired
WebApplicationContext webApplicationContext;

MockMvc mockMvc;

public static String asJsonString(final Object obj) {
    try {
        final ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(obj);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

@BeforeAll
void setMockMvc() {
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}

@Test
@DisplayName("Retrieve Something")
@Order(1)
void testRetrieveSomething() throws Exception{
    MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get(
            "/retrieve_something"))
            .andExpect(status().isOk()).andReturn();

    System.out.println(    
    result.getResponse().getContentType()); // returns application/json;charset=UTF-8
}

}

【问题讨论】:

    标签: java spring-boot integration-testing junit5 spring-boot-test


    【解决方案1】:

    把最后一行getContentType()改成getContentAsString()

    【讨论】:

    • 我也试过了,但 getContentAsString() 没有响应,并说不能对空结果采取行动。但是,实际上下面的代码是有效的。 mockMvc.perform(asyncDispatch(result)) .andExpect(jsonPath("total_count").isNumber()) .andExpect(status().isOk());唯一的问题是我无法从 JSON 响应中获取内容。我认为 application/json;charset=UTF-8" 类型存在一些问题。
    • application/json 有什么问题;charset=UTF-8,你期待哪种类型?
    • 我的 Spring Boot 版本是 2.1.6.RELEASE。你用的是哪个版本?。不知道是版本问题还是什么的。
    • 我用 2.1.6.REALEASE 试过了,它也可以工作
    • 好吧,那我可能做错了,我试试。谢谢你的努力。
    猜你喜欢
    • 1970-01-01
    • 2020-03-20
    • 2013-05-09
    • 1970-01-01
    • 2020-08-09
    • 2018-07-24
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多