Mi primer API Rest con Spring Boot
Crear el proyecto con Spring Boot
Para iniciar con nuestro proyecto lo realizaremos con spring
initializr.
Descripción de los campos:
Project: Seleccionamos el gestor de nuestra aplicación maven o
gradle, utilizaremos maven
Languaje: Elegimos con qué lenguaje queremos trabajar,
utilizaremos Java
Spring Boot: Seleccionamos la versión con la que queremos trabajar,
se deja la que está por default
Project Metadata: Aquí ingresamos el nombre de nuestro proyecto
Packaging: Seleccionamos el empaquetado de nuestra aplicaciones
Java: Seleccionamos la versión de Java
Dependecies: Aquí buscaremos las dependencias que necesitemos,
buscamos y agregamos las que se muestran a continuación.
Damos clic en Generate para descargar el proyecto, una vez
descargado lo descomprimimos.
Para el desarrollo de la aplicación utilizamos Spring Tool Suite (STS),
en este IDE importamos el proyecto como Existing Maven Projects
Nos aparecerá un archivo pom.xml, marcamos el check y damos clic
en next.
Nuestro proyecto (STS) empezará a descargar las dependencias que
seleccionamos anteriormente, estas se encuentran en el archivo
pom.xml
La Base de datos
Esta será la estructura de nuestra base de datos.
En el archivo application.properties con la siguiente ruta de acceso:
src/main/resources/ agregamos el string de conexión para ingresar
a la base de datos que creamos anteriormente.
spring.datasource.url=jdbc:mysql://localhost:3306/t
est?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=
spring.jpa.show-sql=true
Desarrollo de la API
La siguiente estructura de paquetes es la que creamos para la
aplicación.
La clase DemoApplication.java
Es la clase que arranca cuando iniciamos la aplicación.
package com.example.demo;
import org.springframework.boot.SpringApplication;
import
org.springframework.boot.autoconfigure.SpringBootApplication;
import
org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@SpringBootApplication
@EnableJpaAuditing
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
La clase Person.java
La entidad de nuestro objeto Person, esta clase va a mapear los
atributos como campos en la base de datos.
package com.example.demo.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.data.annotation.CreatedDate;
import
org.springframework.data.jpa.domain.support.AuditingEntityListene
r;
@Entity
@Table(name = "users")
@EntityListeners(AuditingEntityListener.class)
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Column(name = "user_name")
private String userName;
@Column(name = "date_registry")
@CreatedDate
private Date date;
public Person() {
public Person(Long id, String name, String userName, Date
date) {
this.id = id;
this.name = name;
this.userName = userName;
this.date = date;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
public String getName() {
return name;
public void setName(String name) {
this.name = name;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
public Date getDate() {
return date;
public void setDate(Date date) {
this.date = date;
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ",
userName=" + userName + ", date=" + date + "]";
}
La clase PersonRepository.java
Esta clase nos ayuda a realizar operaciones en nuestra base de datos
sin escribir tantas líneas de código, Spring Data realiza esto por
nosotros, operaciones como delete, save, findAll, son algunos de los
métodos que realiza automáticamente.
package com.example.demo.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.example.demo.model.Person;
@Repository
public interface PersonRepository extends JpaRepository<Person,
Long>{
List<Person> findByName(@Param("name") String name);
}
La clase PersonController.java
Esta clase le indica a spring que la clase va a ser un controlador de
una API Rest, nos proveerá de todos los métodos para un CRUD.
package com.example.demo.Controlller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.model.Person;
import com.example.demo.repository.PersonRepository;
@RestController
@RequestMapping("/api")
public class PersonController {
@Autowired
private PersonRepository repository;
@GetMapping("/persons")
public List<Person> allPersons(){
return repository.findAll();
@GetMapping("/person/{name}")
public List<Person> findByName(@PathVariable("name")
String name) {
return repository.findByName(name);
@PostMapping("/person")
public Person createPerson(@RequestBody Person person) {
return repository.save(person);
@PutMapping("/person/{id}")
public Person updatePerson(@PathVariable int id
,@RequestBody Person person) {
return repository.save(person);
@DeleteMapping("/person/{id}")
public void deletePerson(@PathVariable("id") Long id) {
repository.deleteById(id);
SECCION DE PRUEBAS
Para realizar las pruebas correspondientes vamos a utilizar postman
una aplicación para probar api's.
Realizamos una prueba para almacenar un nuevo registro, para esto
utilizamos un método POST.
Con el método POST nosotros podemos almacenar nuevos registros
en nuestra base de datos.
Probamos la petición Get
Esta petición get nos traerá todos los registros
Prueba de la petición Get con parámetro
Con la petición Get con parámetro name, podemos buscar un objeto
Person por medio del name.
Prueba para actualizar un registro
Este es el registro que queremos actualizar.
A continuación con el método PUT, actualizamos el registro