0
respostas

[Sugestão] Sugestão de maneira de tratar o erro 400

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?