Srxs, Bom dia. Estou com uma dúvida de como lidar com a validação de unique.
Suponha a classe model Consultor:
public class Consultor extends Model {
@NotNull(message = "O nome não pode ser nulo")
@NotBlank(message = "O nome deve ser preenchido")
@Column(nullable = true, unique = true, length = 512)
private String nome;
@NotNull(message = "O email não pode ser nulo")
@NotBlank(message = "O email deve ser preenchido")
@Column(nullable = false, unique = true, length = 512)
private String email;
@Column(nullable = true, unique = false, columnDefinition = "TEXT")
private String telefone;
...
Note que, o email e o nome devem ser unique's. Como devo validar isso na minha API rest pra não devolver um stack trace em caso de erro?
Atualmente meu código esta assim:
@PostMapping
public ResponseEntity<Consultor> createConsultor(@Valid Consultor consultor, BindingResult bindingResult, UriComponentsBuilder uriBuilder) {
consultor = consultorService.save(consultor);
URI uri = uriBuilder.path("/api/consultor/{id}").buildAndExpand(consultor.getId()).toUri();
return ResponseEntity.created(uri).body(consultor);
}
@org.springframework.web.bind.annotation.RestControllerAdvice
public class ErroValidacaoHandler {
@Autowired
private MessageSource messageSource;
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public List<ErroDeFormulario> handle(MethodArgumentNotValidException exception) {
List<ErroDeFormulario> erros = new ArrayList<>();
List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors();
for (FieldError err : fieldErrors) {
erros.add(new ErroDeFormulario(err.getField(), messageSource.getMessage(err, Locale.getDefault())));
}
//
return erros;
}
}