Invocando Métodos @GetMapping y @PutMapping desde Flutter
Invocando Métodos @GetMapping y @PutMapping desde Flutter
Entendiendo el Código de Spring Boot
Antes de adentrarnos en la implementación de Flutter, repasemos rápidamente lo que hacen estos métodos en Spring Boot:
- @GetMapping("/personas/get"): Este método, al ser anotado con
@GetMapping, expone un endpoint RESTful que responde a solicitudes HTTP GET en la ruta/personas/get. Cuando se hace una petición a esta URL, el métodogetAll()de la clasepersonase ejecuta y devuelve una cadena de texto. - @PutMapping("/personas/insert"): Este método, por su parte, expone un endpoint que responde a solicitudes HTTP PUT en la ruta
/personas/insert. Al hacer una petición PUT a esta URL, los datos enviados en el cuerpo de la solicitud (representados por el objetoPersona) se utilizan para insertar un nuevo registro en la base de datos a través del métodoAdd().
Implementando en Flutter
Para consumir estos endpoints desde Flutter, utilizaremos el paquete http. Este paquete nos proporciona herramientas para hacer solicitudes HTTP de manera sencilla.
Dart
import 'dart:convert';
import 'package:http/http.dart' as http;
class Persona {
final int id;
final String nombre;
// ... otros campos
Persona({required this.id, required this.nombre, ...});
// ... métodos para convertir a/desde JSON
}
Future<List<Persona>> obtenerPersonas() async {
final response = await http.get(Uri.parse('http://tu_servidor:tu_puerto/personas/get'));
if (response.statusCode == 200) {
// Suponemos que el servidor devuelve un JSON con una lista de personas
final List<dynamic> data = jsonDecode(response.body);
return data.map((json) => Persona.fromJson(json)).toList();
} else {
// Manejar errores
throw Exception('Failed to load personas');
}
}
Future<int> insertarPersona(Persona persona) async {
final response = await http.put(
Uri.parse('http://tu_servidor:tu_puerto/personas/insert'),
headers: <String, String>{'Content-Type': 'application/json'},
body: jsonEncode(persona.toJson()),
);
if (response.statusCode == 200) {
// Suponemos que el servidor devuelve el ID del registro insertado
return jsonDecode(response.body)['id'];
} else {
// Manejar errores
throw Exception('Failed to insert persona');
}
}
Explicación del código
- Definición de la clase Persona: Se define una clase
Personapara representar un objeto persona, con sus respectivos atributos y métodos para convertirlo a/desde JSON. - Función obtenerPersonas(): Esta función realiza una solicitud GET al endpoint
/personas/gety decodifica la respuesta JSON para obtener una lista de objetosPersona. - Función insertarPersona(): Esta función realiza una solicitud PUT al endpoint
/personas/insert, enviando los datos de la persona en el cuerpo de la solicitud.
Usando las funciones en tu aplicación Flutter
Una vez que tienes estas funciones, puedes utilizarlas en cualquier parte de tu aplicación Flutter. Por ejemplo:
Dart
FutureBuilder<List<Persona>> (
future: obtenerPersonas(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(snapshot.data![index].nombre),
);
},
);
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
// By default, show a loading spinner.
return const CircularProgressIndicator();
},
)
Importante:
- Reemplazar URL: Asegúrate de reemplazar
http://tu_servidor:tu_puertocon la URL correcta de tu servidor Spring Boot. - Manejo de errores: Es fundamental implementar un manejo de errores adecuado para situaciones como conexiones fallidas, respuestas inesperadas, etc.
- Seguridad: Si estás manejando datos sensibles, asegúrate de utilizar HTTPS para encriptar la comunicación y considerar mecanismos de autenticación y autorización.
- Serialización/Deserialización: Verifica que la estructura de los objetos JSON que se envían y reciben coincida con la definición de las clases en Flutter y Spring Boot.
Consideraciones adicionales:
- Estado: Para gestionar el estado de los datos en tu aplicación Flutter, puedes utilizar librerías como Provider, Riverpod o BLoC.
- Librerías externas: Existen otras librerías como
dioque ofrecen funcionalidades adicionales para realizar solicitudes HTTP. - Pruebas: Realiza pruebas unitarias y de integración para asegurarte de que la comunicación entre Flutter y Spring Boot funcione correctamente.
Comentarios
Publicar un comentario