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 passer @RequestBody paramètre du contrôleur à l'aide d'MockMVC
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 avec content(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 votre RequestParam isuserId ? -> Essayer de mettre /usermgmt/createCloudCredential?userId=aricloud_admin au lieu de .param("username", "aricloud_admin")
InformationsquelleAutor dexter | 2016-08-09