Comment passer @RequestBody paramètre du contrôleur à l'aide d'MockMVC
Paramètres avec @RequestParam annotation peut être transmis en utilisant : post("/******/***").param("variable", "valeur")
mais comment puis-je transmettre la valeur du paramètre ayant @RequestBody annotation?
Ma méthode de test est :
@Test
public void testCreateCloudCredential() throws Exception {
CloudCredentialsBean cloudCredentialsBean = new CloudCredentialsBean();
cloudCredentialsBean.setCloudType("cloudstack");
cloudCredentialsBean.setEndPoint("cloudstackendPoint");
cloudCredentialsBean.setUserName("cloudstackuserName");
cloudCredentialsBean.setPassword("cloudstackpassword");
cloudCredentialsBean.setProviderCredential("cloudstackproviderCredential");
cloudCredentialsBean.setProviderIdentity("cloudstackproviderIdentity");
cloudCredentialsBean.setProviderName("cloudstackproviderName");
cloudCredentialsBean.setTenantId(78);
cloudCredentialsBean.setCredentialId(98);
StatusBean statusBean = new StatusBean();
statusBean.setCode(200);
statusBean.setStatus(Constants.SUCCESS);
statusBean.setMessage("Credential Created Successfully");
Gson gson = new Gson();
String json = gson.toJson(cloudCredentialsBean);
ArgumentCaptor<String> getArgumentCaptor =
ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Integer> getInteger = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<CloudCredentialsBean> getArgumentCaptorCredential =
ArgumentCaptor.forClass(CloudCredentialsBean.class);
when(
userManagementHelper.createCloudCredential(getInteger.capture(),
getArgumentCaptorCredential.capture())).thenReturn(
new ResponseEntity<StatusBean>(statusBean, new HttpHeaders(),
HttpStatus.OK));
mockMvc.perform(
post("/usermgmt/createCloudCredential").param("username", "aricloud_admin").contentType(
MediaType.APPLICATION_JSON).content(json)).andExpect(
status().isOk());
}
Contrôleur méthode testée est :
@RequestMapping(value = "/createCloudCredential", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<StatusBean> createCloudCredential(
@RequestParam("userId") int userId,
@RequestBody CloudCredentialsBean credential) {
return userManagementHepler.createCloudCredential(userId, credential);
}
D'erreur que je reçois est :
Comment puis-je passer une maquette de la valeur pour informations d'identification ici?
- désolé, je n'ai pas ce que suggérez-vous
- Désolé si je ne comprends pas la question, mais si vous vous demandez comment passer le
@RequestBody
dans le simulacre, vous avez votre solution dans votre exemple:mockkMvc.perform( post("/usermgmt/createCloudCredential").param("username", "aricloud_admin").contentType( MediaType.APPLICATION_JSON).content(json))
. Vous l'avez converti en json avant:String json = gson.toJson(cloudCredentialsBean);
et passé le contenu aveccontent(json)
. Est-ce que vous souhaitez? - mais ce n'est pas de travail
- Peut-être que vous êtes de passage en paramètre
userName
mais votreRequestParam
isuserId
? -> Essayer de mettre/usermgmt/createCloudCredential?userId=aricloud_admin
au lieu de.param("username", "aricloud_admin")
Vous devez vous connecter pour publier un commentaire.
Un
POST
demande passe normalement sesparam
dans son corps. Donc je ne comprends pas ce que vous attendez en donnant à la fois unparam
et uncontent
pour la même demande.Donc, ici, vous pouvez tout simplement faire:
Si vous devez passer le paramètre
"username=aricloud_admin"
, l'ajouter à laJSON
chaîne, ou sinon, passer explicitement comme une chaîne de requête: