API Biblioteca completo (3) Controladores

Los controladores son el núcleo de la aplicación. Toda la lógica de negocio está aquí. Recordemos que tenemos puntos de entrada ‘endpoint’ y cuando el usuario accede a uno de estos puntos se ejecuta lo que tengamos ahí.

Nosotros nos estamos basando en la arquitectura REST: Si yo lo que suelo hacer es CRUD y yo en HTTP tengo los verbos GET, POST, PUT y DELETE, me monto una manera de trabajar en la que el formato de datos es JSON y hago el match GET-Read POST-Create PUT-Update DELETE-Delete.

El Spring boot me proporciona la capacidad de definir urls de entrada con el mapping. Y de definir el verbo con el prefijo del mapping. Así PostMapping(‘/autor’) me está diciendo que si yo hago una petición POST a la url /autor entrará en ese punto del controlador.

Recordemos que tenemos dos tipos de controladores RestController y Controller. En el primer caso que es el que estamos viendo el propio Spring serializa (convierte a JSON) los valores que devolvemos.

También ‘mágicamente’ podemos utilizar los repositorios con la anotación @Autowired que se encarga de crear una instancia del objeto e inyectarlo.

Como los controladores que hemos definido aquí realizan el CRUD de las tres entidades tenemos una API completamente funcional.

package com.trifulcas.SpringBootBiblioteca.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.trifulcas.SpringBootBiblioteca.model.Genero;
import com.trifulcas.SpringBootBiblioteca.repository.GeneroRepository;

@RestController
@RequestMapping("/genero")
public class GeneroController {

	@Autowired
	GeneroRepository generoRepository;

	@GetMapping("")
	public List<Genero> getAll() {
		try {
			return generoRepository.findAll();
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	// Poner los valores en la URL, no parámetros nombrados
	@GetMapping("/{id}")
	public ResponseEntity<Genero> getById(@PathVariable int id) {
		System.out.println(id);

		try {
			Genero cat= generoRepository.findById(id).orElse(null);
			if (cat!=null) {
				return new ResponseEntity<>(cat, HttpStatus.OK);
			}
			else {
				return new ResponseEntity<>(HttpStatus.NOT_FOUND);
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	@PostMapping("")
	public Genero add(@RequestBody Genero cat) {
		System.out.println(cat);
		try {
			if (cat.getIdgenero() == 0 && cat.getNombre() != null) {
				return generoRepository.save(cat);
			} else {
				return null;
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	@PutMapping("/{id}")
	public Genero put(@RequestBody Genero cat, @PathVariable int id) {
		System.out.println(cat);
		System.out.println(id);
		try {
			if (cat.getIdgenero() == id) {
				return generoRepository.save(cat);
			} else {
				return null;
			}

		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	@DeleteMapping("/{id}")
	public int delete(@PathVariable int id) {
		try {
			System.out.println(id);
			generoRepository.deleteById(id);
			return id;
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return 0;
		}
	}
}

package com.trifulcas.SpringBootBiblioteca.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.trifulcas.SpringBootBiblioteca.model.Libro;
import com.trifulcas.SpringBootBiblioteca.repository.LibroRepository;

@RestController
@RequestMapping("/libro")
public class LibroController {

	@Autowired
	LibroRepository libroRepository;
	
	@GetMapping("")
	public List<Libro> getAll() {
		try {
			return libroRepository.findAll();
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	// Poner los valores en la URL, no parámetros nombrados
	@GetMapping("/{id}")
	public ResponseEntity<Libro> getById(@PathVariable int id) {
		System.out.println(id);

		try {
			Libro cat= libroRepository.findById(id).orElse(null);
			if (cat!=null) {
				return new ResponseEntity<>(cat, HttpStatus.OK);
			}
			else {
				return new ResponseEntity<>(HttpStatus.NOT_FOUND);
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	@PostMapping("")
	public Libro add(@RequestBody Libro cat) {
		System.out.println(cat);
		try {
			if (cat.getIdlibro() == 0 && cat.getTitulo() != null) {
				return libroRepository.save(cat);
			} else {
				return null;
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	@PutMapping("/{id}")
	public Libro put(@RequestBody Libro cat, @PathVariable int id) {
		System.out.println(cat);
		System.out.println(id);
		try {
			if (cat.getIdlibro() == id) {
				return libroRepository.save(cat);
			} else {
				return null;
			}

		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	@DeleteMapping("/{id}")
	public int delete(@PathVariable int id) {
		try {
			System.out.println(id);
			libroRepository.deleteById(id);
			return id;
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return 0;
		}
	}
}

package com.trifulcas.SpringBootBiblioteca.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.trifulcas.SpringBootBiblioteca.model.Autor;
import com.trifulcas.SpringBootBiblioteca.repository.AutorRepository;

@RestController
@RequestMapping("/autor")
public class AutorController {

	@Autowired
	AutorRepository autorRepository;

	@GetMapping("")
	public List<Autor> getAll() {
		try {
			return autorRepository.findAll();
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	// Poner los valores en la URL, no parámetros nombrados
	@GetMapping("/{id}")
	public ResponseEntity<Autor> getById(@PathVariable int id) {
		System.out.println(id);

		try {
			Autor cat= autorRepository.findById(id).orElse(null);
			if (cat!=null) {
				return new ResponseEntity<>(cat, HttpStatus.OK);
			}
			else {
				return new ResponseEntity<>(HttpStatus.NOT_FOUND);
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	@PostMapping("")
	public Autor add(@RequestBody Autor cat) {
		System.out.println(cat);
		try {
			if (cat.getIdautor() == 0 && cat.getNombre() != null) {
				return autorRepository.save(cat);
			} else {
				return null;
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	@PutMapping("/{id}")
	public Autor put(@RequestBody Autor cat, @PathVariable int id) {
		System.out.println(cat);
		System.out.println(id);
		try {
			if (cat.getIdautor() == id) {
				return autorRepository.save(cat);
			} else {
				return null;
			}

		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
	}

	@DeleteMapping("/{id}")
	public int delete(@PathVariable int id) {
		try {
			System.out.println(id);
			autorRepository.deleteById(id);
			return id;
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return 0;
		}
	}
}

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos