Olá, estou tentando incluir uma busca na minha api com Feign Client onde dado um numero de um cep o mesmo irá cadastrar automaticamente o nome da cidade e o estado, porém estou com certa dificuldade para entender como eu posso fazer isso usando o método POST, alguém poderia me ajudar dando um exemplo de como eu posso fazer isso no controller? Obrigada!
package br.com.api.rest.entity;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@Entity
@Data
@Table(name = "cliente")
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@NotEmpty
@Column(name = "nome_completo", nullable = false)
private String nomeCompleto;
@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "sexo", nullable = false, length = 1)
private Sexo sexo;
@NotNull
@Temporal(TemporalType.DATE)
@JsonFormat(pattern="yyyy-MM-dd")
@Column(name = "data_nascimento", nullable = false)
private Date dataNascimento;
@NotNull
@Column(name = "idade", nullable = false)
private int idade;
@NotNull
@Valid
@ManyToOne
@JoinColumn(name = "cidade_id")
private Cidade cidade;
@NotEmpty
@Column(name = "cep", nullable = false)
private String cep;
}
@FeignClient(url = "viacep.com.br/ws/", name = "cepService")
public interface ViaCEPService {
@RequestMapping(method = RequestMethod.POST, value = "/cadastrar", consumes = "application/json")
public void buscacep(@PathVariable("cep") String cep);
}
@RestController
@RequestMapping("/cliente")
public class ClienteController {
@Autowired
private ClienteService clienteService;
@PostMapping
public ResponseEntity<Cliente> cadastrarCliente(@RequestBody @Valid Cliente cliente) {
clienteService.cadastrarCliente(cliente);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
}
@Service
public class ClienteService {
public Cliente cadastrarCliente(Cliente cliente) {
return clienteRepository.save(cliente);
}
}
@Entity
@Data
@Table(name = "cidade")
@NoArgsConstructor
public class Cidade {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@NotNull @NotEmpty
@Column(name = "nome_cidade", nullable = false)
private String nome;
@NotNull @NotNull
@Column(name = "estado", nullable = false, length = 2)
private String estado;
}