Como receber e enviar JSON em uma API Java?
O formato JSON (JavaScript Object Notation) é amplamente utilizado para comunicação entre sistemas e APIs REST. No Spring Boot, o processo de enviar e receber JSON é feito automaticamente pela integração com a biblioteca Jackson.
1. Criando um Endpoint que Retorna JSON
O Spring Boot converte automaticamente objetos Java em JSON quando um método retorna um objeto ou lista. Veja um exemplo de endpoint REST que retorna JSON:
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class ProdutoController {
@GetMapping("/produtos")
public List<Produto> listarProdutos() {
return List.of(
new Produto(1, "Notebook", 4500.00),
new Produto(2, "Smartphone", 2200.00)
);
}
}
class Produto {
private int id;
private String nome;
private double preco;
public Produto(int id, String nome, double preco) {
this.id = id;
this.nome = nome;
this.preco = preco;
}
public int getId() { return id; }
public String getNome() { return nome; }
public double getPreco() { return preco; }
}
Explicação:
- O método
listarProdutos()
retorna uma lista de objetosProduto
.- O Spring Boot converte essa lista automaticamente para JSON.
- O JSON gerado será semelhante a:
[
{ "id": 1, "nome": "Notebook", "preco": 4500.00 },
{ "id": 2, "nome": "Smartphone", "preco": 2200.00 }
]
2. Criando um Endpoint que Recebe JSON (POST)
Agora, vamos criar um endpoint que recebe dados JSON e os converte automaticamente para um objeto Java:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class ProdutoController {
@PostMapping("/produtos")
public Produto criarProduto(@RequestBody Produto produto) {
System.out.println("Produto recebido: " + produto.getNome());
return produto; // Retorna o produto recebido como JSON
}
}
Explicação:
- O
@RequestBody
indica que o JSON recebido será convertido para um objetoProduto
automaticamente.- Se enviarmos um JSON via Postman:
{
"id": 3,
"nome": "Tablet",
"preco": 1800.00
}
- O servidor imprimirá Produto recebido: Tablet no console.
- E responderá com o mesmo JSON enviado.
3. Testando os Endpoints
- Para testar a resposta do GET:
- Acesse
http://localhost:8080/api/produtos
no navegador ou Postman.
- Acesse
- Para testar o POST:
- No Postman, envie um JSON para
http://localhost:8080/api/produtos
. - Configure o tipo da requisição como POST e o Content-Type como
application/json
.
- No Postman, envie um JSON para
4. Como Personalizar a Serialização JSON?
Caso precise modificar como os dados são enviados/recebidos, utilize anotações do Jackson:
import com.fasterxml.jackson.annotation.JsonProperty;
class Produto {
private int id;
@JsonProperty("descricao")
private String nome;
private double preco;
public Produto(int id, String nome, double preco) {
this.id = id;
this.nome = nome;
this.preco = preco;
}
public int getId() { return id; }
public String getNome() { return nome; }
public double getPreco() { return preco; }
}
Explicação:
@JsonProperty("descricao")
faz com que o camponome
seja exibido como "descricao" no JSON.
Conclusão
Enviar e receber JSON em APIs REST no Spring Boot é extremamente fácil, graças à integração automática com a biblioteca Jackson. O framework cuida da conversão entre objetos Java e JSON, permitindo um desenvolvimento mais rápido e eficiente.
Por que JSON é o formato padrão para comunicação em APIs REST?
A comunicação entre aplicações modernas depende fortemente do formato JSON. No passado, a conversão de objetos para JSON e vice-versa era um processo manual e demorado. Com a adoção de bibliotecas como Jackson no Spring Boot, esse processo foi automatizado, tornando a troca de dados entre cliente e servidor muito mais eficiente.
Algumas aplicações:
- Desenvolvimento de APIs para aplicações web e mobile
- Integração com bancos de dados e sistemas externos
- Criação de microsserviços baseados em REST
- Comunicação entre frontend e backend
Dicas para quem está começando
- Use Postman para testar requisições JSON
- Garanta que a anotação
@RequestBody
esteja presente ao receber JSON - Personalize a conversão JSON usando a biblioteca Jackson
- Se precisar consumir APIs externas, aprenda a usar
RestTemplate
Contribuições de Rodrigo Farias