/
java56
/
FindMaxNumber
Обзор
Документация
Войти
/
java56
/
FindMaxNumber
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/mikhail/digit/exception/GlobalExceptionHandler.java
67 строк
3 KB
Mikhail Gorbatenkov
12 - add a global exception handler
23 фев 2025, 16:14
23 фев 2025, 16:14
b7e9255
Код
Авторство
О чём код?
package com.mikhail.digit.exception; import com.mikhail.digit.response.ErrorResponse; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import java.util.List; import java.util.stream.Collectors; @RestControllerAdvice public class GlobalExceptionHandler { /** * Обработка ошибок валидации при @Valid * @param ex исключение, возникающее при вводе некорректных значений * @return ответ с описанием исключения */ @ExceptionHandler({MethodArgumentNotValidException.class}) public ResponseEntity<ErrorResponse> handleValidationExceptions(MethodArgumentNotValidException ex) { List<String> errorMessages = ex.getBindingResult() .getAllErrors() .stream() .map(error -> { if (error instanceof FieldError fieldError) { return fieldError.getField() + ": " + fieldError.getDefaultMessage(); } else { return error.getDefaultMessage(); } }) .collect(Collectors.toList()); String errorMessage = String.join("; ", errorMessages); ErrorResponse errorResponse = new ErrorResponse(); errorResponse.setError("Ошибка валидации: " + errorMessage); return ResponseEntity.badRequest().body(errorResponse); } /** * Обработка ошибок некорректного формата JSON. * @param ex исключение, возникающее при некорретном формате JSON или пустом теле запроса * @return ответ с описанием исключения */ @ExceptionHandler(HttpMessageNotReadableException.class) public ResponseEntity<ErrorResponse> handleHttpMessageNotReadableException(HttpMessageNotReadableException ex) { String detailedMessage = ex.getMostSpecificCause().getMessage(); ErrorResponse errorResponse = new ErrorResponse(); errorResponse.setError("Ошибка разбора входных данных: " + detailedMessage); return ResponseEntity.badRequest().body(errorResponse); } /** * Обработка остальных непредвиденных ошибок. * @param ex исключение, которое может возникнуть * @return ответ с описанием ошибки */ @ExceptionHandler(Exception.class) public ResponseEntity<ErrorResponse> handleGenericException(Exception ex) { ErrorResponse errorResponse = new ErrorResponse(); errorResponse.setError("Произошла ошибка: " + ex.getMessage()); return ResponseEntity.badRequest().body(errorResponse); } }