Salut j'ai un contrôleur mvc printemps
@RequestMapping(value = "/jobsdetails/{userId}", method = RequestMethod.GET)
@ResponseBody
public List<Jobs> jobsDetails(@PathVariable Integer userId,HttpServletResponse response) throws IOException {
try {
Map<String, Object> queryParams=new LinkedHashMap<String, Object>();
queryParams.put("userId", userId);
jobs=jobsService.findByNamedQuery("findJobsByUserId", queryParams);
} catch(Exception e) {
logger.debug(e.getMessage());
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
}
return jobs;
}
Je veux voir à quoi ressemblera la chaîne JSON lorsque j'exécuterai cette opération. J'ai écrit ce cas de test
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("classpath:webapptest")
@ContextConfiguration(locations = {"classpath:test-applicationcontext.xml"})
public class FindJobsControllerTest {
private MockMvc springMvc;
@Autowired
WebApplicationContext wContext;
@Before
public void init() throws Exception {
springMvc = MockMvcBuilders.webAppContextSetup(wContext).build();
}
@Test
public void documentsPollingTest() throws Exception {
ResultActions resultActions = springMvc.perform(MockMvcRequestBuilders.get("/jobsdetails/2").accept(MediaType.APPLICATION_JSON));
System.out.println(/* Print the JSON String */); //How ?
}
}
Comment obtenir la chaîne JSON?
J'utilise Spring 3, codehause Jackson 1.8.4
Essayez ce code:
resultActions.andDo(MockMvcResultHandlers.print());
L'astuce consiste à utiliser andReturn()
MvcResult result = springMvc.perform(MockMvcRequestBuilders
.get("/jobsdetails/2").accept(MediaType.APPLICATION_JSON)).andReturn();
String content = result.getResponse().getContentAsString();
Vous pouvez activer la réponse d’impression de chaque méthode de test lors de la configuration de l’instance MockMvc
.
springMvc = MockMvcBuilders.webAppContextSetup(wContext)
.alwaysDo(MockMvcResultHandlers.print())
.build();
Notez la partie .alwaysDo(MockMvcResultHandlers.print())
du code ci-dessus. De cette façon, vous pouvez éviter d’appliquer un gestionnaire d’impression pour chaque méthode de test.
Pour moi cela a fonctionné quand j'ai utilisé le code ci-dessous:
ResultActions result =
this.mockMvc.perform(post(resource).sessionAttr(Constants.SESSION_USER, user).param("parameter", "parameterValue"))
.andExpect(status().isOk());
String content = result.andReturn().getResponse().getContentAsString();
Et ça a marché !! :RÉ
J'espère pouvoir aider l'autre avec ma réponse
Si vous testez le contrôleur, vous n'obtiendrez pas le résultat JSon, qui est renvoyé par la vue. Si vous pouvez tester la vue (ou le contrôleur puis la vue), ou démarrer un contrainer de servlet (avec Cargo par exemple), et tester au niveau HTTP, ce qui est un bon moyen de vérifier ce qui se passe réellement.