code: @ExceptionHandler(Exception.class)
      public ResponseEntity handleException(Exception ex) {
          EXC_LOGGER.error("[P] Presentation Layer Exception: " + ex.getLocalizedMessage(), ex);
          if (ex instanceof BehaviorAwareException) {
              BehaviorAwareException bae = (BehaviorAwareException) ex;
              return bae.toResponse(bae.getData());
          }
          if (ex instanceof BusinessRuntimeException) {
              BusinessRuntimeException bre = (BusinessRuntimeException) ex;
              return new ResponseEntity<>(Response.newBuilder()
                      .withMessage(bre.getMessage())
                      .withHttpStatus(HttpStatus.INTERNAL_SERVER_ERROR.toString())
                      .withObj(new String[]{bre.getMessageKey()})
                      .build(),
                      HttpStatus.INTERNAL_SERVER_ERROR
              );
          }
          if (ex instanceof HttpBusinessException) {
              HttpBusinessException e = (HttpBusinessException) ex;
              return new ResponseEntity<>(Response.newBuilder()
                      .withMessage(ex.getMessage())
                      .withHttpStatus(e.getHttpStatus().toString())
                      .build(),
                      e.getHttpStatus()
              );
          }
          if (ex instanceof ValidationException) {
              return new ResponseEntity<>(Response.newBuilder()
                      .withMessage(ex.getMessage())
                      .withHttpStatus(HttpStatus.BAD_REQUEST.toString())
                      .build(),
                      HttpStatus.BAD_REQUEST
              );
          }
          if (ex instanceof TechnicalRuntimeException) {
              return new ResponseEntity<>(Response.newBuilder()
                      .withMessage(ex.getMessage())
                      .withHttpStatus(HttpStatus.BAD_GATEWAY.toString())
                      .build(),
                      HttpStatus.BAD_GATEWAY
              );
          }
          return new ResponseEntity<>(Response.newBuilder()
                  .withMessage(ex.getMessage())
                  .withHttpStatus(HttpStatus.INTERNAL_SERVER_ERROR.toString())
                  .build(),
                  HttpStatus.INTERNAL_SERVER_ERROR
          );
      }
docs: All general exceptions thrown by services are caught here and translated into http conform responses with a status code {@code 500
  Internal Server Error}.
  
  @param ex The exception occurred
  @return A response object wraps the server result