2017-02-14 27 views
1

我想在Android的春天POST請求。它發送一些鍵值對正常工作,如果我使用的是春天的Android - POST請求 - URL編碼PARAMS從Object類

MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();

有什麼辦法可以避免MultiValueMap &直接發送類對象請求

一個解決方案中,採用反射,像下面

for (Field field:objAuth.getClass().getDeclaredFields()){ 
        field.setAccessible(true); 
        map.add(field.getName(),field.get(objAuth)+""); 
       } 

代碼段

 RestTemplate restTemplate = new RestTemplate(true); 
     restTemplate.getMessageConverters().add(new FormHttpMessageConverter()); 
     restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
     restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 


     HttpHeaders requestHeaders = new HttpHeaders(); 
     requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 

     MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>(); 
     Authenticate objAuth = new Authenticate(); 
     objAuth.setUserId("1"); 
     objAuth.setType("Type"); 
     objAuth.setoAuthToken("00112233"); 
     objAuth.setResponseCode("9689"); 
     objAuth.setResponseMessage("Last Message"); 

     /** 
     * Using Reflection 
     */ 
     for (Field field:objAuth.getClass().getDeclaredFields()){ 
      field.setAccessible(true); 
      map.add(field.getName(),field.get(objAuth)+""); 
     } 

     HttpEntity<?> requestEntity = new HttpEntity<Object>(map , requestHeaders); 

     String response = restTemplate.postForObject("http://posttestserver.com/post.php",requestEntity, String.class); 
+0

爲什麼選擇下投票? –

回答

0

在發佈的APPLICATION_FORM_URLENCODED媒體類型與FormHttpMessageConverter,你必須使用一個MultiValueMap,如看到here。或者,如果您想發佈JSON,則Jackson會在內部用於將任何對象類轉換爲JSON輸出。 Spring使用消息轉換器來確定如何讀取/寫入對象,以及哪些類型與哪些媒體類型兼容。