/
java56
/
Minesweeper
Обзор
Документация
Войти
/
java56
/
Minesweeper
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/mikhail/minesweeper/exception/GlobalExceptionHandler.java
84 строки
4 KB
Mikhail Gorbatenkov
32 - edit the global exception handler
17 фев 2025, 17:43
17 фев 2025, 17:43
454612c
Код
Авторство
О чём код?
package com.mikhail.minesweeper.exception; import com.mikhail.minesweeper.dto.response.ErrorResponse; import jakarta.validation.ConstraintViolationException; 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); } /** * Обработка ошибок валидации при @Validated * @param ex исключание, которое может возникнуть * @return ответ с описанием исключения */ @ExceptionHandler(ConstraintViolationException.class) public ResponseEntity<ErrorResponse> handleConstraintValidationException(ConstraintViolationException ex) { String errorMessage = ex.getConstraintViolations().stream() .map(violation -> violation.getPropertyPath() + ": " + violation.getMessage()) .collect(Collectors.joining("; ")); 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); } }