Issue
I'm new in Spring boot and Spring data JPA, and I'm trying to make a get request to search the url for all cities with the same UF but I'm not getting it. Can anyone shed some light on how I can do a get to search for the UFs? I'm trying to do the following:
@GetMapping(value = {"/{uf}"})
public List<Cidade> findByUF(@PathVariable String uf){
return repositorioCidade.findAll();
}
Here is how I'm trying to do:
My Repository:
public interface RepositorioCidade extends JpaRepository<Cidade,Long>{
List<Cidade> findByUF(String uf);
}
Entity Cidade:
@Entity
public class Cidade {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idCidade;
@Column(nullable = false)
private String cidade;
private String uf;
public Long getIdCidade() {
return idCidade;
}
public void setIdCidade(Long idCidade) {
this.idCidade = idCidade;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getUf() {
return uf;
}
public void setUf(String uf) {
this.uf = uf;
}
}
Controller:
@RestController
@RequestMapping("/cidade")
public class CidadeREST {
@Autowired
private RepositorioCidade repositorioCidade;
@GetMapping
public Page<Cidade> listar(Pageable page){
return repositorioCidade.findAll(page);
}
// @GetMapping(value = {"/{uf}"})
// public List<Cidade> findByUF(@PathVariable String uf){
// return repositorioCidade.findAll();
// }
@PostMapping
public void salvar(@RequestBody Cidade cidade){
repositorioCidade.save(cidade);
}
@PutMapping
public void alterar(@RequestBody Cidade cidade){
if(cidade.getIdCidade() > 0)
repositorioCidade.save(cidade);
}
@GetMapping("/{idCidade}")
public void excluir(@PathVariable Long idCidade){
repositorioCidade.deleteById(idCidade);
}
}
Solution
You have to link findByUF()
method instead of JPA inbuild method findAll()
with repository object in controller.
Your repository should become
public interface RepositorioCidade extends JpaRepository<Cidade,Long>{
@Query(nativeQuery= true, value="SELECT * FROM cidade WHERE uf = ?")
List<Cidade> findByUF(String uf);
}
OR
public interface RepositorioCidade extends JpaRepository<Cidade,Long>{
List<Cidade> findByUF(String uf);
}
Your Controller should become
@GetMapping(value = {"/{uf}"})
public List<Cidade> findByUF(@PathVariable String uf){
return repositorioCidade.findByUF(uf);
}
Answered By - Faeem azaz Bhanej
Answer Checked By - David Marino (JavaFixing Volunteer)