Olá pessoal,
Estou desenvolvendo um micro-serviço com SpringBoot e estou tentando validar o email que a pessoa manda verificando se já existe em minha base dados.
Porque estou fazendo isso?
A ideia é criar uma validação antes que chegue na camada de persistência, evitando exceptions do banco e retornando uma mensagem amigavel, o meu maior problema é como eu consigo usar a interface PessoaService que acessa a camada de persistência fora da classe PessoaController que tem a anotação @RestController
public interface PessoaService {
public Pessoa save(Pessoa pessoa);
public Pessoa update(Pessoa pessoa);
public Pessoa findById(Long id);
public void delete(Long id);
public List findAll();
}
Implementação da Interface
@Service
public class PessoaServiceBean implements PessoaService {
@Autowired
private PessoaRepository dao;@Override
public Pessoa save(Pessoa pessoa){
// TODO Auto-generated method stubPessoa p1 = dao.save(pessoa); return p1;
}
Minha classe Controller
@RestController
public class PessoaController {
@Autowired
private PessoaService dao;
@SuppressWarnings(“rawtypes”)
@RequestMapping(
value="/api/pessoas",
method=RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity salvar(@RequestBody Pessoa pessoa) throws Exception{ExceptionThrower e = new ExceptionThrower(); e.trhowMandatorio(pessoa); Pessoa objPessoa = pessoa; dao.save(pessoa); return new ResponseEntity<Pessoa>(objPessoa, HttpStatus.CREATED);
}
Minha Classe que trata os erros, a única forma que achei foi chamando minha API para poder fazer esse teste mas ai não fica legal
public class ExceptionThrower {
@Autowired
RestTemplate rs = new RestTemplate();
public void trhowMandatorio(Pessoa pessoa) throws CustomException {
CustomException e = new CustomException();
if (validateEmail(pessoa.getEmail()) == true) { e.setCode(HttpStatus.CONFLICT); e.setMessage("Email ja cadastrado"); throw e; } else { }
}
private boolean validateEmail(String email) {
boolean teste = false;
String obj = rs.getForObject(“http://localhost:8080/servicopessoa/api/pessoas”, String.class);
JSONArray l = new JSONArray(obj);
if (l.length() > 0) {
for (int i = 0; i < l.length();i++) {
JSONObject json = l.getJSONObject(i); if (email.equals(json.get("email"))){ teste = true; return teste; } } } else { return teste; } return teste;
}
quem puder dar essa força agradeço desde já!!!