2013-02-19 1 views
2

J'utilise Spring android framework pour récupérer des données json via HTTP POST. Mais tout en consommant le service, les paramètres sont reçus au niveau du serveur.Récupération de données JSON via HTTP POST à ​​l'aide de Spring Android Framework

Voici le code Android:

protected String doInBackground(String... params) { 
String username = params[0]; 

String password = params[1]; 

String url = connectServices.connectLoginServiceURL();// returns url 

loginServiceParam = new LinkedMultiValueMap<String, String>(); 
loginServiceParam.add("username", username); 
loginServiceParam.add("password", password); //username and password are null at server end. 

HttpHeaders requestHeaders = new HttpHeaders(); 

requestHeaders.setAccept(Collections.singletonList(new MediaType("application", "json"))); 
requestHeaders.setContentType(MediaType.APPLICATION_JSON); 

HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(loginServiceParam, requestHeaders); 

// Create a new RestTemplate instance 
RestTemplate restTemplate = new RestTemplate(); 

// Add the Gson message converters 
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter()); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 

// Make the HTTP POST request, marshaling the response from JSON 

ResponseEntity<LoginBean> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, LoginBean.class); 

LoginBean loginBeanResponse = responseEntity.getBody(); 

status = loginBeanResponse.getStatus(); 

return status; 
} 

classe LoginBean suit:

public class LoginBean { 

    private String status; 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 
} 

La réponse JSON est:

{"status":"true"} 

Merci!

Répondre

2

J'ai moi-même résolu cette requête. code suivant doit être mis

RestTemplate restTemplate = new RestTemplate(true); 

Vrai est requis pour la demande POST. Par défaut, il est faux et c'est pour la requête GET. Ceci n'est pas mentionné même sur Spring Android Reference link

+0

Arpit, c'est incorrect. Le paramètre 'true' n'a rien à voir avec les requêtes POST ou GET. Passer 'true' à une nouvelle instance RestTemplate indique d'ajouter un ensemble de convertisseurs de messages par défaut. Voir le document de référence ici: http://static.springsource.org/spring-android/docs/1.0.x/reference/htmlsingle/#d4e161 Aussi le doc API: http://static.springsource.org/spring-android /docs/1.0.x/api/org/springframework/web/client/RestTemplate.html#RestTemplate(boolean) –

+0

Roy, merci pour l'information. Je n'ai pu traiter le POST que si 'true' est passé au RestTemplate. Sans cela, j'ai rencontré l'exception suivante: 'org.springframework.web.client.RestClientException: Impossible d'écrire la requête: pas de HttpMessageConverter trouvé pour le type de requête [org.springframework.util.LinkedMultiValueMap]' –

Questions connexes