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:
- 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 quemethod
? - Ajouté createRequest
- Le
MockHttpServletRequestBuilder
classe a un certain nombre de chaînage de méthodes qui vous aideront à construire votre demande. Utilisationaccept(..)
pour configurer votreAccept
en-têtes, utilisezcontent(..)
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!
Vous devez vous connecter pour publier un commentaire.
J'ai fini par résoudre cela en procédant comme suit:
J'espère que cela peut conduire quelqu'un d'autre dans la bonne direction.
Grâce