JavaLessons/AtLeastOneGroupValidator/src/main/java/me/bvn13/test/spring/validation/atleastonegroup/web/ApiExceptionHandler.java

39 lines
1.4 KiB
Java

package me.bvn13.test.spring.validation.atleastonegroup.web;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.HashMap;
import java.util.Map;
@Slf4j
@RestControllerAdvice
public class ApiExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<?> handle(MethodArgumentNotValidException e) {
log.error("Validation exception", e);
final Map<String, String> errors = new HashMap<>();
e.getBindingResult().getAllErrors().forEach((error) -> {
if (error instanceof FieldError) {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
} else {
errors.put(error.getObjectName(), error.getDefaultMessage());
}
});
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.body(ApiResponseDto.builder()
.response(errors)
.status("VALIDATION_ERROR: Validation error")
.build());
}
}