java – 如何使用MockMVC传递控制器的@RequestBody参数
发布时间:2020-12-14 05:54:52 所属栏目:Java 来源:网络整理
导读:带有@RequestParam注释的参数可以使用:post(“/ ****** / ***”).param(“variable”,“value”)传递 但是如何传递具有@RequestBody注释的参数值? 我的测试方法是: @Test public void testCreateCloudCredential() throws Exception { CloudCredentialsBe
带有@RequestParam注释的参数可以使用:post(“/ ****** / ***”).param(“variable”,“value”)传递
但是如何传递具有@RequestBody注释的参数值? 我的测试方法是: @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()); } 正在测试的控制器方法是: @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); } 我得到的错误是: 解决方法
POST请求通常会在其正文中传递其参数.所以我无法通过同一个请求提供参数和内容来理解您的期望.
所以在这里,你可以简单地做: mockMvc.perform( post("/usermgmt/createCloudCredential").contentType( MediaType.APPLICATION_JSON).content(json)).andExpect( status().isOk()); 如果需要传递参数“username = aricloud_admin”,请将其添加到JSON字符串,或者将其作为查询字符串显式传递: mockMvc.perform( post("/usermgmt/createCloudCredential?username=aricloud_admin") .contentType(MediaType.APPLICATION_JSON).content(json)) .andExpect(status().isOk()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |