Інтеграція Hibernate Validation у Spring Boot для вдосконаленої валідації параметрів — Глобальна обробка виключень

Глобальна обробка виключень за допомогою @ControllerAdvice

Централізоване оброблення помилок валідації робить код чистішим та зручнішим для підтримки.

Ви можете використовувати @ControllerAdvice та @ExceptionHandler для глобальної обробки помилок валідації в усіх контролерах.

import org.springframework.http.HttpStatus;  
import org.springframework.ui.Model;  
import org.springframework.web.bind.annotation.*;  
import org.springframework.validation.ObjectError;  
import org.springframework.web.bind.annotation.ExceptionHandler;  
import org.springframework.web.bind.annotation.ControllerAdvice;  
import org.springframework.validation.BindingResult;  
import org.springframework.beans.factory.annotation.Autowired;
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
import java.util.HashMap;  
import java.util.Map;  
import org.springframework.util.AnnotationUtils;  
@ControllerAdvice  
public class GlobalExceptionHandler {  
 private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);  
 /**  
 * Обробляє всі невідомі виключення.
*  
 * @param e виключення  
 * @return мапа, що містить повідомлення про помилку  
 */  
 @ExceptionHandler(Exception.class)  
 @ResponseBody  
 public Map handleException(Exception e) throws Exception {  
 LOGGER.error(e.getMessage(), e);  
 // Якщо виключення анотоване @ResponseStatus, перекидаємо виключення для обробки з кодом статусу.  
 if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {  
 throw e;  
 }  
 Map result = new HashMap<>();  
 result.put("Повідомлення про помилку: ", e.getMessage());  
 return result;  
 }  
 /**  
 * Обробляє бізнес-специфічні виключення.
*  
 * @param e бізнес-виключення  
 * @return мапа, що містить повідомлення про помилку  
 */  
 @ExceptionHandler(UserNotExistException.class)  
 @ResponseBody  
 public Map handleBusinessException(UserNotExistException e) {  
 LOGGER.error(e.getMessage(), e);  
 Map result = new HashMap<>();  
 result.put("Повідомлення про помилку: ", e.getMessage());  
 return result;  
 }  
 /**  
 * Обробляє помилки валідації з аргументів методів.  
 *  
 * @param e виключення валідації  
 * @return мапа, що містить повідомлення про помилки валідації  
 */  
 @ExceptionHandler(MethodArgumentNotValidException.class)  
 @ResponseBody  
 public Map handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {  
 LOGGER.error(e.getMessage(), e);  
 Map result = new HashMap<>();  
 String messages = "";  
 // Проходимо по всіх помилках валідації і конкатенуємо їх повідомлення.
for (ObjectError objectError : e.getBindingResult().getAllErrors()) {  
 messages += objectError.getDefaultMessage() + ",";  
 }  
 result.put("Повідомлення про помилку: ", messages);  
 return result;  
 }  
}

Це дозволить перехоплювати всі помилки валідації в вашому додатку, спрощуючи управління відповідями про помилки.

Загальні анотації для валідації

Ось деякі часто використовувані анотації Hibernate Validator:

  • @NotBlank: Перевіряє, що поле не є порожнім або null.
  • @NotNull: Перевіряє, що поле не є null.
  • @Min: Визначає мінімальне значення.
  • @Max: Визначає максимальне значення.
  • @Size: Перевіряє розмір рядка або масиву.
  • @Email: Перевіряє, чи є поле дійсною електронною адресою.
  • @Length: Перевіряє довжину рядка (використовується для складніших випадків).

Висновок

Інтеграція Hibernate Validator з Spring Boot надає потужні інструменти для валідації введених користувачем даних як на рівні класу, так і методу.
Використовуючи можливості, такі як кастомізовані повідомлення про помилки, групова валідація та глобальна обробка виключень, ви можете побудувати чисту та зручну для підтримки логіку валідації. Незалежно від того, створюєте ви невеликий додаток чи велике корпоративне рішення, ці техніки валідації гарантують, що ваш додаток обробляє введення користувача безпечно та ефективно.

Дотримуючись цих практик, ваші Spring Boot додатки стануть більш надійними, і ви зменшите ризик потрапляння некоректних даних у вашу систему. Успіхів у кодингу!

Перекладено з: Integrating Hibernate Validation in Spring Boot for Advanced Parameter Validation — Global Exception Handling

Leave a Reply

Your email address will not be published. Required fields are marked *