Api Spring Boot, mapeamento objeto, buscar pelo CPF ao invez de ID
Estou fazendo uma Api com java com Spring boot,
e gostaria que ele buscasse pelo CPF e nao pelo ID;
http://localhost:8080/pacientes/ID
http://localhost:8080/pacientes/Cpf (sera informado pelo usuario)
http://localhost:8080/pacientes/cpf->http://localhost:8080/pacientes/77777785558
e tenho o seguinte campos na classe PACIENTE;
o ID gostaria de deixar como esta, para ele criar,deleta, e alterar, na url, gostaria de buscar pelo CPF.
________________CLASE DOMAIN____________________________
@Entity
public class Paciente implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private Long cpf;
private String nome;
public Paciente() {
}
public Paciente(Integer id,Long cpf, String nome) {
super();
this.id = id;
this.cpf = cpf
this.nome = nome;
}
[.gets sets.]
_______________________________________________________
__________________________PacienteRepository_________________
@Repository
public interface PacienteRepository extends JpaRepository<Paciente, Integer> {
}
_______________________PacienteResource____________________________________
@RestController
@RequestMapping(value = "capientes")
public class PacienteResource {
@Autowired
PacienteService PacienteService;
@GetMapping(value = "/")
public ResponseEntity<Paciente> buscar(@PathVariable Integer id) {
Paciente obj = PacienteService.findId(id);
return ResponseEntity.ok().body(obj);
}
_____________________________PacienteService_____________________
@Service
public class PacienteService {
@Autowired
PacienteRepository repo;
public Paciente findId(Integer id) {
Optional<Paciente> obj = repo.findById(id);
return obj.orElseThrow(() -> new ObjectNotFoundException("Objeto não encontrado! ID: " + id + ", Tipo"+ PacienteService.class.getName()));
}
public Paciente insert (Paciente obj) {
obj.setId(null);
return repo.save(obj);
}
public Paciente update (Paciente obj) {
findId(obj.getId());
return repo.save(obj);
}
public void delete(Integer id) {
findId(id);
try {
repo.deleteById(id);
}
catch (DataIntegrityViolationException e) {
throw new DateIntegrityException("Não é possível excluir uma Paciente ");
}
}
}
____________________________________________________________________________
está funcionado , porem eu preciso ao invés de buscar pelo ID, quero buscar pelo cpf, que a pessoa ira informa, ficando assim:
http://localhost:8080/pacientes/77777788898788
Hoje ele esta buscando paciente somente pelo ID
http://localhost:8080/pacientes/1
e gostaria que ele buscasse pelo CPF e nao pelo ID;
http://localhost:8080/pacientes/ID
http://localhost:8080/pacientes/Cpf (sera informado pelo usuario)
http://localhost:8080/pacientes/cpf->http://localhost:8080/pacientes/77777785558
e tenho o seguinte campos na classe PACIENTE;
o ID gostaria de deixar como esta, para ele criar,deleta, e alterar, na url, gostaria de buscar pelo CPF.
________________CLASE DOMAIN____________________________
@Entity
public class Paciente implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private Long cpf;
private String nome;
public Paciente() {
}
public Paciente(Integer id,Long cpf, String nome) {
super();
this.id = id;
this.cpf = cpf
this.nome = nome;
}
[.gets sets.]
_______________________________________________________
__________________________PacienteRepository_________________
@Repository
public interface PacienteRepository extends JpaRepository<Paciente, Integer> {
}
_______________________PacienteResource____________________________________
@RestController
@RequestMapping(value = "capientes")
public class PacienteResource {
@Autowired
PacienteService PacienteService;
@GetMapping(value = "/")
public ResponseEntity<Paciente> buscar(@PathVariable Integer id) {
Paciente obj = PacienteService.findId(id);
return ResponseEntity.ok().body(obj);
}
_____________________________PacienteService_____________________
@Service
public class PacienteService {
@Autowired
PacienteRepository repo;
public Paciente findId(Integer id) {
Optional<Paciente> obj = repo.findById(id);
return obj.orElseThrow(() -> new ObjectNotFoundException("Objeto não encontrado! ID: " + id + ", Tipo"+ PacienteService.class.getName()));
}
public Paciente insert (Paciente obj) {
obj.setId(null);
return repo.save(obj);
}
public Paciente update (Paciente obj) {
findId(obj.getId());
return repo.save(obj);
}
public void delete(Integer id) {
findId(id);
try {
repo.deleteById(id);
}
catch (DataIntegrityViolationException e) {
throw new DateIntegrityException("Não é possível excluir uma Paciente ");
}
}
}
____________________________________________________________________________
está funcionado , porem eu preciso ao invés de buscar pelo ID, quero buscar pelo cpf, que a pessoa ira informa, ficando assim:
http://localhost:8080/pacientes/77777788898788
Hoje ele esta buscando paciente somente pelo ID
http://localhost:8080/pacientes/1
Ariel
Curtidas 0