在 Spring 中按字符串查找 - REST API

Find by String in Spring - REST API

我是 Spring 引导和 Spring 数据 JPA 的新手,我正在尝试发出获取请求以搜索 url 具有相同 UF 的所有城市但我不明白。谁能阐明我如何才能搜索 UF? 我正在尝试执行以下操作:

@GetMapping(value = {"/{uf}"})
 public List<Cidade> findByUF(@PathVariable String uf){
      return repositorioCidade.findAll();        
 }

这是我正在尝试做的事情:

我的存储库:

public interface RepositorioCidade extends JpaRepository<Cidade,Long>{
    List<Cidade> findByUF(String uf);
}

实体城:

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

    
}

控制器:

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

您必须 link findByUF() 方法而不是 JPA inbuild 方法 findAll() 在控制器中使用存储库对象。

你的仓库应该变成

public interface RepositorioCidade extends JpaRepository<Cidade,Long>{
    @Query(nativeQuery= true, value="SELECT * FROM cidade WHERE uf = ?")
    List<Cidade> findByUF(String uf);
}

public interface RepositorioCidade extends JpaRepository<Cidade,Long>{
    List<Cidade> findByUF(String uf);
}

你的控制器应该变成

@GetMapping(value = {"/{uf}"})
public List<Cidade> findByUF(@PathVariable String uf){
    return repositorioCidade.findByUF(uf);        
}

我在你的代码中看到你在控制器中调用了一个在存储层中不存在的方法 更改 findByUF

的正文
@GetMapping(value = {"/{uf}"})
public List<Cidade> findByUF(@PathVariable String uf){
  return repositorioCidade.findAll();        
} 

对此:

@GetMapping(value = {"/{uf}"})
public List<Cidade> findByUF(@PathVariable String uf){
  return repositorioCidade.findByUF(uf);        
}