A documentação de propriedades do Spring pode ser encontrada em https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html.

Quando ocorre um erro em uma requisição, o Spring retorna por padrão o código HTTP 500, que indica erro no servidor interno, junto com outras informações em formato JSON.

Para retornar códigos adequados, seria possível adicionar blocos try-catch nos métodos do controller para capturar exceções. Entretanto, essas exceções podem se repetir em vários métodos e utilizar try-catch para fazer o tratamento iria poluir a classe controller. Por isso, a melhor alternativa é criar uma classe que será responsável por realizar o tratamento de erros.

@RestControllerAdvice
public class TratadorDeErros {

    @ExceptionHandler(EntityNotFoundException.class)
    public ResponseEntity tratarErro404(){
        return ResponseEntity.notFound().build();
    }
}

Para que esta classe seja reconhecida pelo Spring, são necessárias duas anotações:

No código 400, o Spring retorna uma serie de informações que não são necessárias para o cliente, por isso, no tratamento é retornado somente as informações necessárias. Para isso, é necessário os erros da exceção, selecionar as informações necessárias em um DTO, e adicionar ao corpo da resposta.

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity tratarErro400(MethodArgumentNotValidException ex){
    var erros = ex.getFieldErrors();
    return ResponseEntity.badRequest().body(erros.stream().map(DadosErroValidacao::new).toList());
}

private record DadosErroValidacao(String campo, String mensagem){
    public DadosErroValidacao(FieldError erro){
        this(erro.getField(), erro.getDefaultMessage());
    }
}

O que foi aprendido?