Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[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?

1 resposta
solução!

Oi Matheus! Tudo certo?

A sua abordagem usando um HashMap para tratar o erro 400 é uma alternativa válida e pode ser mais concisa dependendo do que você deseja alcançar. Ao retornar um Map<String, String>, você está simplificando a estrutura de resposta, tornando-a mais direta ao associar diretamente o campo ao erro correspondente. Isso pode ser útil se você quiser um formato de resposta mais simples e direto.

Quanto à sua pergunta sobre contra-indicações ao usar HashMap, aqui estão alguns pontos a considerar:

  1. Ordem dos Elementos: HashMap não garante a ordem dos elementos. Se a ordem dos campos na resposta for importante, considere usar um LinkedHashMap, que mantém a ordem de inserção.

  2. Concorrência: HashMap não é sincronizado. Se você estiver usando isso em um ambiente altamente concorrente, pode precisar de uma estrutura de dados que suporte concorrência, como ConcurrentHashMap.

  3. Legibilidade e Manutenção: Enquanto o uso de HashMap pode simplificar o código, ele pode reduzir a legibilidade se a estrutura de resposta esperada for mais complexa ou se houver necessidade de adicionar mais informações no futuro. Usar um DTO pode ser mais flexível nesse sentido.

A escolha entre usar um HashMap ou um DTO depende das suas necessidades específicas e de como você espera que a API evolua. Se a simplicidade é o objetivo principal e a ordem dos campos não é crítica, sua abordagem é perfeitamente aceitável.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.