Mobile

Android – Realizando POSTs com SpringAndroid

 

Dando continuidade à série de desenvolvimento de aplicações REST com Spring, neste post eu darei um exemplo de como realizar POST nas suas aplicaçoes Android com a utilização do Spring.

Novamente, se você não viu os posts anteriores, eu sugiro que dê uma olhada, eles podem esclarecer possíveis dúvidas (Desenvolvimento REST com Android e Consumindo JSON com Spring ).

Nos exemplos à seguir, eu demonstrarei como realizar dois tipos de POST para um servidor remoto, de acordo com o tipo de parâmetro que ele recebe.

 

Primeiro, enviaremos uma classe para um serviço que recebe um @RequestBody:

 

Serviço que recebe o POST:

[cc lang=”java” width=”100%”]

@RequestMapping(value = “/model”, method = RequestMethod.POST)
@ResponseBody
public Contato criarContatoModel(@RequestBody final Contato contato) {

// Implementação do método…
}

[/cc]

Método que envia o POST:

[cc lang=”java” width=”100%”]

public void onClick(final View v) {
RestTemplate restTemplate = new RestTemplate();

List> messageConverters = new ArrayList>();
messageConverters.add(new MappingJacksonHttpMessageConverter());
restTemplate.setMessageConverters(messageConverters);

restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());

Contato contato = restTemplate.postForObject(“http://192.168.16.148:8080/rest/contatos/model”,
new Contato(“João”, “0000-0000”, “email@email.com”, “@twitter”, “/facebook”), Contato.class);

// Tratamento com os contatos recebidos…
}

[/cc]

 

A implementação acima, como pode-se perceber, é extremamente simples. Exige apenas um message converter para JSON, no caso o Jackson.

O envio para um serviço que recebe uma lista de parâmetros, no entanto é um pouco diferente:

[cc lang=”java” width=”100%”]

@RequestMapping(value = “/params”, method = RequestMethod.POST)

public Contato criarContato(@RequestParam final String nome, @RequestParam final String celular,

@RequestParam final String email, @RequestParam final String twitter, @RequestParam final String facebook) {

// Implementação do método…

}

[/cc]

Método de envio do POST:

[cc lang=”java” width=”100%”]

public void onClick(final View v) {
RestTemplate restTemplate = new RestTemplate();

List> messageConverters = new ArrayList>();
messageConverters.add(new FormHttpMessageConverter());
messageConverters.add(new MappingJacksonHttpMessageConverter());
restTemplate.setMessageConverters(messageConverters);

restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());

MultiValueMap values = new LinkedMultiValueMap();
values.add(“nome”, “nome”);
values.add(“celular”, “celular”);
values.add(“email”, “email”);
values.add(“twitter”, “twitter”);
values.add(“facebook”, “facebook”);

Contatos result = restTemplate.postForObject(“http://192.168.16.148:8080/rest/contatos/params”, values,
Contatos.class);

// Tratamento com os contatos recebidos…
}

[/cc]

Nesta segunda implementação, devemos prestar atenção à alguns detalhes. Primeiro, nota-se que utilizamos dois message converters: um para a serialização dos valores a serem enviados (FormHttpMessageConverter), pois o serviço que recebe o POST espera um content-type “application/x-www-form-urlencoded”, e um para a serialização dos valores recebidos (MappingJackson), pois o serviço nos retorna o response em formato JSON.

Em segundo, lugar, os nossos parâmetros devem ser enviados dentro de um Map, ou, mais específicamente, de um MultiValueMap, pois este, atualmente, é o único que o FormHttp consegue serializar.

 

(Agradecimentos ao @oliverafelix pela ajuda na finalização do tutorial.)


Este foi mais um post da série Android, espero que tenham gostado. Quaisquer dúvidas, sugestões e/ou reclamações, comentem!

_________________________________________

Lucas Oliveira – Analista Programador na redspark.
Bacharel em Sistemas de Informação pela Universidade de São Paulo.
@OliveiraLima_

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Compartilhe isso: