Nuevos endpoints para cosas extra

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

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos