package $package.presentation.rest; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.http.ResponseEntity; import org.springframework.http.HttpStatus; import org.springframework.web.server.ResponseStatusException; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.dao.DataIntegrityViolationException; import $package.presentation.dto.ErrorResponse; @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity handleValidationException( MethodArgumentNotValidException ex, org.springframework.web.context.request.WebRequest request) { String errors = ex.getBindingResult().getFieldErrors().stream() .map(f -> f.getField() + ": " + f.getDefaultMessage()) .collect(java.util.stream.Collectors.joining(", ")); ErrorResponse error = new ErrorResponse( HttpStatus.BAD_REQUEST.value(), "Validation Error", "Validation failed: " + errors, request.getDescription(false).replaceFirst("uri=", "") ); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); } @ExceptionHandler(ResponseStatusException.class) public ResponseEntity handleResponseStatusException( ResponseStatusException ex, org.springframework.web.context.request.WebRequest request) { ErrorResponse error = new ErrorResponse( ex.getStatusCode().value(), ex.getStatusCode().toString(), ex.getReason(), request.getDescription(false).replaceFirst("uri=", "") ); return new ResponseEntity<>(error, ex.getStatusCode()); } @ExceptionHandler(DataIntegrityViolationException.class) public ResponseEntity handleDataIntegrityViolation( DataIntegrityViolationException ex, org.springframework.web.context.request.WebRequest request) { ErrorResponse error = new ErrorResponse( HttpStatus.CONFLICT.value(), "Conflict", ex.getMostSpecificCause() != null ? ex.getMostSpecificCause().getMessage() : ex.getMessage(), request.getDescription(false).replaceFirst("uri=", "") ); return ResponseEntity.status(HttpStatus.CONFLICT).body(error); } }