Home > Software engineering >  Find by String in Spring - REST API
Find by String in Spring - REST API

Time:03-30

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 method findAll() 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);        
} 
  • Related