Normalmente queremos hacer más cosas aparte del crud estandard, para eso definimos nuevos endpoints, por ejemplo:
// Si yo quiero obtener los libros de un género, algo que he perdido // con el JSON ignore pues me lo monto yo @GetMapping("/{id}/libros") public Set<Libro> getLibrosByIdGenero(@PathVariable int id) { System.out.println(id); try { Genero cat = generoRepository.findById(id).orElse(null); if (cat != null) { return cat.getLibros(); } else { return null; } } catch (Exception ex) { System.out.println(ex.getMessage()); return null; } }
// Poner los valores en la URL, no parámetros nombrados @GetMapping("/{id}/libros") public Set<Libro> getLibrosByIdAutor(@PathVariable int id) { System.out.println(id); try { Autor cat = autorRepository.findById(id).orElse(null); if (cat != null) { return cat.getLibros(); } else { return null; } } catch (Exception ex) { System.out.println(ex.getMessage()); return null; } }
Endpoints en libros para manejar la relación con autores:
// Gestión de libros y autores @PostMapping("{idlibro}/autor/{idautor}") public Libro addLibroAutor(@PathVariable int idlibro, @PathVariable int idautor) { System.out.println(idlibro); System.out.println(idautor); try { Libro libro = libroRepository.findById(idlibro).orElse(null); Autor autor = autorRepository.findById(idautor).orElse(null); if (libro != null && autor != null) { libro.getAutores().add(autor); return libroRepository.save(libro); } else { return null; } } catch (Exception ex) { System.out.println(ex.getMessage()); return null; } } // Gestión de libros y autores @DeleteMapping("{idlibro}/autor/{idautor}") public Libro deleteLibroAutor(@PathVariable int idlibro, @PathVariable int idautor) { System.out.println(idlibro); System.out.println(idautor); try { Libro libro = libroRepository.findById(idlibro).orElse(null); Autor autor = autorRepository.findById(idautor).orElse(null); if (libro != null && autor != null) { libro.getAutores().remove(autor); return libroRepository.save(libro); } else { return null; } } catch (Exception ex) { System.out.println(ex.getMessage()); return null; } }