Spring Boot @RestControllerAdvice работает локально, но не при развертывании Render.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Boot @RestControllerAdvice работает локально, но не при развертывании Render.

Сообщение Anonymous »

У меня есть приложение Spring Boot 3 с глобальным обработчиком исключений, которое отлично работает, когда я запускаю его локально, но когда я развертываю тот же код в Render, обработка исключений перестает работать — я получаю только общий ответ 500 Internal Server Error.
Вот мой глобальный обработчик исключений:

Код: Выделить всё

@RestControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(DataConflictException.class)
public ResponseEntity handleDataConflict(DataConflictException ex) {
Map body = new LinkedHashMap();
body.put("timestamp", LocalDateTime.now());
body.put("status", HttpStatus.CONFLICT.value());
body.put("error", "Data Conflict");
body.put("message", ex.getMessage());
return new ResponseEntity(body, HttpStatus.CONFLICT);
}

@ExceptionHandler(DataIntegrityViolationException.class)
public ResponseEntity handleDataIntegrityViolation(DataIntegrityViolationException ex) {
Map body = new LinkedHashMap();
body.put("timestamp", LocalDateTime.now());
body.put("status", HttpStatus.CONFLICT.value());
body.put("error", "Data Conflict");
body.put("message", ex.getMostSpecificCause().getMessage());
return new ResponseEntity(body, HttpStatus.CONFLICT);
}

@ExceptionHandler(Exception.class)
public ResponseEntity handleGenericException(Exception ex) {
Map body = new LinkedHashMap();
body.put("timestamp", LocalDateTime.now());
body.put("status", HttpStatus.INTERNAL_SERVER_ERROR.value());
body.put("error", "Internal Error");
body.put("message", ex.getMessage());
return new ResponseEntity(body, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Когда я запускаю приложение локально (с использованием IntelliJ), если в базу данных (PostgreSQL) вставлен дубликат ключа, я получаю правильный ответ JSON, например:

Код: Выделить всё

{
"timestamp": "...",
"status": 409,
"error": "Data Conflict",
"message": "This email has already been registered"
}
Однако, когда я развертываю тот же код для Render, вместо этого я получаю только этот ответ:

Код: Выделить всё

{
"timestamp": "...",
"status": 500,
"error": "Internal Error",
"message": "could not execute statement [ERROR: duplicate key value violates unique constraint ...]"
}
Похоже, мой @RestControllerAdvice не срабатывает
Структура моего проекта такая:

Код: Выделить всё

com.salus.agenda
├── SalusApplication.java  (@SpringBootApplication)
├── Configuration
│    ├── SecurityConfiguration.java
│    └── GlobalExceptionHandler.java
├── Controllers
├── Services
└── Repositories
Я подтвердил, что все работает локально.

Есть ли какая-либо причина, по которой @RestControllerAdvice может не регистрироваться или запускаться при запуске Render?

Может ли это быть связано с профилями Spring, фильтрами (например, моим фильтром JWT) или исключениями на уровне базы данных, происходящими до уровня контроллера?
Будут полезны любые идеи или советы по устранению неполадок. оценил.

Подробнее здесь: https://stackoverflow.com/questions/798 ... deployment
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»