Durante o curso, o instrutor optou por tratar o erro 400, devolvendo o campo e a mensagem da seguinte maneira:
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity handle400(MethodArgumentNotValidException ex) {
var errors = ex.getFieldErrors();
return ResponseEntity.badRequest().body(errors.stream().map(erroValidacaoDTO::new).toList());
}
private record erroValidacaoDTO(String campo, String mensagem) {
public erroValidacaoDTO(FieldError ex) {
this(ex.getField(), ex.getDefaultMessage());
}
}
Eu encontrei uma maneira que ao meu ver, é mais concisa, mas queria saber se estou correto.
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handle400(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getFieldErrors()
.forEach(e -> errors.put(e.getField(), e.getDefaultMessage()));
return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
}
Utilizando HashMap, nós devolvemos um mapa, onde a Chave (key) é o campo da mensagem, e o Value (valor) é a mensagem em si.
O retorno seria -> "crm":"must match "\d{4,6}""
Existe alguma contra-indicação ao usar HashMap?