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);
}
}
CodePudding user response:
You have to link
findByUF()
method instead of JPA inbuild methodfindAll()
with repository object in controller.You have to add query in your repository inside
Query()
annotation to find data by String.
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);
}
Your Controller should become:
@GetMapping(value = {"/{uf}"})
public List<Cidade> findByUF(@PathVariable String uf){
return repositorioCidade.findByUF(uf);
}
CodePudding user response:
I saw in your code that you called a method in the controller that does not exist in the repository layer change body of findByUF
@GetMapping(value = {"/{uf}"})
public List<Cidade> findByUF(@PathVariable String uf){
return repositorioCidade.findAll();
}
to this:
@GetMapping(value = {"/{uf}"})
public List<Cidade> findByUF(@PathVariable String uf){
return repositorioCidade.findByUF(uf);
}