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; } } }