[RESOLVIDO] Como utilizar uma String como critério de busca em API REST com Spring Boot ao invés do ID?

Gente, estou aprendendo Spring Boot e utilizando para criação de uma API REST. A API deve permitir apenas a consulta ao Banco de Dados. O desafio que estou respondendo pede, pelo menos no meu entendimento, que a busca possa ser feita usando uma String.

O problema é que não estou acertando fazer isso. Todos os métodos do JPA que já tinha utilizado, só aceitam inteiros(id) como critério.

Alguém pode me ajudar? Desde já, muito obrigada!

Segue exemplo:

Arquivo Autor.java:

/*
* A tabela veio de um banco já existente
*/

@Entity(name="Autor")
@Table(name="escritor")
public class Autor{
	@Id
	private Integer id;
	private String nome;
	private String citacao;

	/*Getters e Setters*/
}

Arquivo AutorRepository.java:

/* Repositório */
public interface AutorRepository extends JpaRepository<Autor, Integer>{
}

Arquivo AutorService.java:

/* Serviço */
public interface AutorService{
	Autor getCitacao();
	
	Autor getCitacaoPorAutor(String nome);
}

Arquivo AutorServiceImpl.java:

@Service
@RestController
@RequestMapping("/view")
public class AutorServiceImpl implements AutorService {
	
	@Autowired
	private AutorRepository repository;
	
	@Override
	@RequestMapping("/citacao")
	@ResponseBody
	public Autor getCitacao(){
		return null;
	}
	
	/* Não sei como procurar por nome */
	@Override
	@RequestMapping("/citacao/{nome}")
	@ResponseBody
	public Autor getCitacaoPorAutor(String nome){
       Autor autor = repository.find?????????????();
	   return autor.getCitacao()???????????;
	}
}

Ola ,

dentro a sua interface AutorRepository voce deve ter um metodo +/- assim :

`Autor findByNome(String nome);`

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

1 curtida

Obrigada, @Daniel_Dias! Usei e deu certo! Tenho mais uma dúvida, se puder me ajudar! :blush:

Quando rodo, ele lança essa exceção:

query did not return a unique result: 7616

O que faz bastante sentido, pois o autor procurado na base de dados possui mais de uma citação. Como faço para exibir apenas uma citação aleatória? :thinking: :smiley:

não entendi direito .

por que não retorna uma lista contendo todas as citação do Auto requerido .?

1 curtida

Porque a API que estou criando é gerador de frases aleatórias. Sendo assim, ela não pode gerar uma lista de frases e sim uma frase por vez.

Não seria o caso de usar recursos como o like? Já que você buscar frases baseados na String e ele vai te retornar uma lista com os items relacionados.

No Spring Data deve ser o Containing, melhor olhar na documentação na parte de criação de querys (https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation )

1 curtida

Nesse ponto, o @Daniel_Dias me ajudou nesse ponto. Agora estou com outro problema relacionado a essa questão. Obrigada! :blush:

1 curtida

Gente, fiz uma outra pergunta relacionada a essa. Se alguém souber e puder me ajudar, eu agradeço… :grin: :blush: