Estou desenvolvendo um projeto com base nas aulas do curso e meu método de atualização (PutMapping) não atualiza e retorna o erro "Not Found". Se alguém puder clarear as minhas ideias, eu ficaria grato!
Classe Controller:
package com.minascafe.api.controllers;
import com.minascafe.api.entities.FichaProdutor;
import com.minascafe.api.record.DadosAtualizacaoFichaProdutor;
import com.minascafe.api.record.DadosCadastroFichaProdutor;
import com.minascafe.api.record.DadosListagemFichaProdutor;
import com.minascafe.api.repositories.FichaProdutorRepository;
import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController //Endpoint (página web) de Controller
@RequestMapping(value = "produtor") //Define a url da classe
public class FichaProdutorController {
@Autowired
private FichaProdutorRepository prod; //Injetando o Repository como sendo um atributo
// @Autowired
// FichaProdutorService ficha;
@GetMapping
public Page<DadosListagemFichaProdutor>Listar(Pageable paginacao){
return prod.findAll(paginacao).map(DadosListagemFichaProdutor::new);
}
@RequestMapping(value = "/nome/{nome}") //Retorna uma ficha de produtor em BUSCA POR NOME
public ResponseEntity<FichaProdutor> buscar(@PathVariable String nome){ //PathVariable obtém o conteúdo que vem após a última barra e trata a requisição
FichaProdutor obj = prod.findByNome(nome);
return ResponseEntity.ok().body(obj);
}
@RequestMapping(value = "/id/{id}") //Retorna uma ficha de produtor em BUSCA POR UM ID
public ResponseEntity<FichaProdutor> retornar(@PathVariable int id){ //PathVariable obtém o conteúdo que vem após a última barra e trata a requisição
FichaProdutor fic = prod.findById(id);
return ResponseEntity.ok().body(fic);
}
@PostMapping
@Transactional //Unidade de trabalho isolada que leva o banco de dados de um estado consistente a outro estado consistente
public void cadastrar(@RequestBody @Valid DadosCadastroFichaProdutor fp) {
prod.save(new FichaProdutor(fp));
}
@PutMapping(value ="/{nome}")
@Transactional
public void atualizar (@RequestBody @Valid DadosAtualizacaoFichaProdutor fb){
var produtor = prod.findByNome(fb.nome());
produtor.atualizarInformacoes(fb);
}
}
Classe Repository:
package com.minascafe.api.repositories;
//@author Edson Ferreira Barbosa
import com.minascafe.api.entities.FichaProdutor;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public interface FichaProdutorRepository extends JpaRepository<FichaProdutor, Integer>{
FichaProdutor findById(int Id); //SELECT * FROM FichaProdutor WHERE Id = this.Id
FichaProdutor findByNome(String nome); //SELECT * FROM FichaProdutor WHERE nome = this.nome
FichaProdutor findByApelido(String apelido); //SELECT * FROM FichaProdutor WHERE apelido = this.apelido
FichaProdutor findByCpf(String cpf); //SELECT * FROM FichaProdutor WHERE cpf = this.cpf
FichaProdutor findByLote(String lote); //SELECT * FROM FichaProdutor WHERE lote = this.lote
}
Classe Service:
package com.minascafe.api.services;
//@author Edson Ferreira Barbosa
import java.util.Optional;
import com.minascafe.api.entities.FichaProdutor;
public interface FichaProdutorService { //Lógica de negócios da aplicação
/**
* Retorna a ficha de um produtor dado um id
*
* @param Id
* @return Ficha Produtor
* @author Edson
*/
Optional<FichaProdutor> buscarPorId(int Id);
/**
* Retorna a ficha de um produtor dado um nome
*
* @param nome
* @return Ficha Produtor
* @author Edson
*/
Optional<FichaProdutor> buscarPorNome(String nome);
/**
* Retorna a ficha de um produtor dado um apelido
*
* @param apelido
* @return Ficha Produtor
* @author Edson
*/
Optional<FichaProdutor> buscarPorApelido(String apelido);
/**
* Retorna a ficha de um produtor dado um cpf
*
* @param cpf
* @return Ficha Produtor
* @author Edson
*/
Optional<FichaProdutor> buscarPorCpf(String cpf);
/**
*
* @param lote
* @return Ficha Produtor
* @author Edson
*/
Optional <FichaProdutor> buscarPorLote(String lote);
/**
* Remove um produtor da base de dados
*
* @param nome
*/
void remover(String nome);
}