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