Как получить данные непосредственно из теста json Spring Spring MvcResult? - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу удалить значение из ответа json, чтобы использовать его в остальной части моего тестового примера, вот что я делаю сейчас:

MvcResult mvcResult = super.mockMvc.perform(get("url").accept(MediaType.APPLICATION_JSON).headers(basicAuthHeaders()))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$[0].id", is(6))).andReturn();

String responseAsString = mvcResult.getResponse().getContentAsString();
ObjectMapper objectMapper = new ObjectMapper(); // com.fasterxml.jackson.databind.ObjectMapper
MyResponse myResponse = objectMapper.readValue(responseAsString, MyResponse.class);

if(myResponse.getName().equals("name")) {
    //
    //
}

Мне интересно, есть ли более элегантныйспособ получить значение непосредственно из MvcResult, как в случае jsonPath для сопоставления?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я нашел более элегантный способ, используя JsonPath из Jayway :

MvcResult mvcResult = super.mockMvc.perform(get("url").accept(MediaType.APPLICATION_JSON).headers(basicAuthHeaders()))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$[0].id", is(6))).andReturn();

String response = mvcResult.getResponse().getContentAsString();
Integer id = JsonPath.parse(response).read("$[0].id");
0 голосов
/ 26 ноября 2018

Нет, к сожалению, нет способа сделать это более элегантно.Однако вы можете использовать content().json() для выполнения проверок, таких как .andExpect(content().json("{'name': 'name'}")) или добавить все необходимые вызовы .andExpect(), что будет более естественно для весеннего тестирования.

...