Comment extraire de la valeur de la réponse JSON lors de l'utilisation Spring MockMVC


Chol Nhial:

J'ai un point final qui accepte une requête POST. Je veux obtenir l'ID de l'entité nouvellement créée à partir de la réponse JSON.

Ci-dessous un segment de mon code où je suis tenté de le faire.

mockMvc.perform(post("/api/tracker/jobs/work")
        .contentType(TestUtil.APPLICATION_JSON_UTF8)
        .content(TestUtil.convertObjectToJsonBytes(workRequest)))
        .andExpect(status().isCreated());

Si je reçois cet ID, je vais interroger la base de l'entité nouvellement créée et faire quelques affirmations comme ci-dessous:

Work work = work service.findWorkById(id);

assertThat(work.getJobItem().getJobItemName()).isEqualTo(workRequest.getJobItem().getJobItemName());
assertThat(work.getJobItem().getQuantities()).hasSize(workRequest.getQuantities().size());
assertThat(work.getJobItem().getQuantityPools()).hasSize(workRequest.getQuantities().size());
Chol Nhial:

J'ai réussi à résoudre mon problème avec gestionnaire de résultats Spring MockMVC. J'ai créé un utilitaire de test pour convertir le dos de chaîne JSON à un objet et ainsi me permettre d'obtenir l'ID.

Utilitaire de conversion:

 public static <T>  Object convertJSONStringToObject(String json, Class<T> objectClass) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

    JavaTimeModule module = new JavaTimeModule();
    mapper.registerModule(module);
    return mapper.readValue(json, objectClass);
}

Test de l'unité:

 @Test
@Transactional
public void createNewWorkWorkWhenCreatedJobItemAndQuantitiesPoolShouldBeCreated() throws Exception {

    mockMvc.perform(post("/api/tracker/jobs/work")
        .contentType(TestUtil.APPLICATION_JSON_UTF8)
        .content(TestUtil.convertObjectToJsonBytes(workRequest)))
        .andExpect(status().isCreated())
        .andDo(mvcResult -> {
            String json = mvcResult.getResponse().getContentAsString();
            workRequestResponse = (WorkRequestResponse) TestUtil.convertJSONStringToObject(json, WorkRequestResponse.class);
        });

    Work work = workService.findWorkById(workRequestResponse.getWorkId());

    assertThat(work.getJobItem().getJobItemName()).isEqualTo(workRequest.getJobItem().getJobItemName());
    assertThat(work.getJobItem().getQuantities()).hasSize(workRequest.getQuantities().size());
    assertThat(work.getJobItem().getQuantityPools()).hasSize(workRequest.getQuantities().size());
}

Articles connexes


Comment extraire une valeur unique de la réponse JSON?

knu2xs: Tout d'abord, je concéderai librement que je n'étais guère plus qu'un gars maladroit des arts libéraux qui est complètement autodidacte dans ce scénario. Cela dit, j'essaie d'obtenir des valeurs d'un service de données sur l'eau de l'USGS en utilisant

Extraire la valeur de la réponse JSON

chirag25 Vous trouverez ci-dessous une réponse JSON d'un appel d'API GET [{ "_id": "60df3ffd440138383acb62cb", "sequence": 2412, "kit_config_id": { "_id": "60df3ffd440138383acb62c6", "kitDetails": [{ "_id": "60df3ffd