39 lines
1.4 KiB
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());
|
|
}
|
|
|
|
}
|