Réglage RequestBody correctement de MockHttpServletRequestBuilder

Je suis simplement en train de tester un Printemps méthode de contrôleur à l'aide d'un MockHttpServletRequestBuilder. La signature de la méthode de contrôleur ressemble à ceci:

 @RequestMapping(value = "/assignTeamsToUsers", method = RequestMethod.POST)
 public @ResponseBody String assignUsersToTeams(Model model, @RequestBody MultiValueMap<String, String> ids).

Dans mon cas de test que j'ai:

MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(applicationContext).build();
MockHttpServletRequestBuilder request = createRequest(uri, method);

//set up request object...Not sure how??
//My current attempt:
     String body = "userIds[]=0&teamIds[]=0";
     request.content(body);
     request.accept(MediaType.ALL);
     request.contentType(MediaType.APPLICATION_FORM_URLENCODED);

ResultActions resultActions = mockMvc.perform(request);

EDIT: en Montrant createRequest. method = "POST"

private MockHttpServletRequestBuilder createRequest (String uri, String method) {
    MockHttpServletRequestBuilder builder = null;

    if("GET".equalsIgnoreCase(method))
        builder = MockMvcRequestBuilders.get(uri);
    else if("POST".equalsIgnoreCase(method))
        builder = MockMvcRequestBuilders.post(uri);
    else
        Assert.fail("Unsupported method!");

    //We always create requests for user Manager
    builder.header("securityRole", Role.Manager.getDisplayName());

    return builder;

}

Je sais que l'uri et la méthode sont corrects. Mon problème est que je suis un 415 code d'erreur à partir du Printemps. Fondamentalement, je ne sais pas comment configurer le request objet pour l' @RequestBody pour la MultiValueMap. J'ai essayé beaucoup de variations de réglage de la demande.le contenu, la définition de la demande.accepter, à la demande.contentType, demande.characterEncoding, et encore à chaque fois que je reçois un 415 erreur.

Si c'est de l'aide, je peux réussir à Poster à ce point de terminaison à l'aide de l'interface web, et voici ce que la demande de recherche comme dans google chrome:

Réglage RequestBody correctement de MockHttpServletRequestBuilder

  • Où en êtes-vous à l'aide de la request?
  • Dans mon cas de test... je ne suis pas sûr si je comprends votre question. J'ai mis à jour ma question cependant de montrer plus de code de test.
  • Ok, donc je veux voir ce que createRequest n'? Qu'est-ce que method?
  • Ajouté createRequest
  • Le MockHttpServletRequestBuilder classe a un certain nombre de chaînage de méthodes qui vous aideront à construire votre demande. Utilisation accept(..) pour configurer votre Accept en-têtes, utilisez content(..) de fournir le corps de la requête de contenu, etc.
  • Ouais...j'ai foiré autour avec ces tout à fait un peu, je vais continuer à chercher en elle cependant. J'ai mis à jour ma question avec ma plus récente tentative. Merci pour votre aide btw.
  • Nous allons également voir votre MVC de configuration pour vos contrôleurs. Ce que vous faites semble bien pour moi.
  • Je l'ai eu à travailler. Merci pour vos efforts pour nous aider!

InformationsquelleAutor jlars62 | 2014-02-27