Skip to content

Instantly share code, notes, and snippets.

@arturozv
Created May 12, 2015 14:32
Show Gist options
  • Save arturozv/6df2355a33d44998e8de to your computer and use it in GitHub Desktop.
Save arturozv/6df2355a33d44998e8de to your computer and use it in GitHub Desktop.
Spring @ControllerAdvice to handle exceptions
package com.shootr.api.web.rest.exception;
import java.util.ArrayList;
import java.util.List;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import com.shootr.api.service.ds.DataServicesException;
@ControllerAdvice
public class RestExceptionHandler {
@ExceptionHandler({InvalidRequestException.class})
protected ResponseEntity<Object> handleInvalidRequest(RuntimeException e, WebRequest request) {
InvalidRequestException invalidRequestException = (InvalidRequestException) e;
List<FieldErrorResource> fieldErrorResources = new ArrayList<>();
List<FieldError> fieldErrors = invalidRequestException.getErrors().getFieldErrors();
for (FieldError fieldError : fieldErrors) {
FieldErrorResource fieldErrorResource = new FieldErrorResource();
fieldErrorResource.setField(fieldError.getField());
fieldErrorResource.setMessage(fieldError.getDefaultMessage());
fieldErrorResources.add(fieldErrorResource);
}
ErrorResource error = new ErrorResource("InvalidRequest", invalidRequestException.getMessage());
error.setFieldErrors(fieldErrorResources);
return new ResponseEntity<Object>(error, HttpStatus.UNPROCESSABLE_ENTITY);
}
@ExceptionHandler({UnauthorizedRequestException.class})
protected ResponseEntity<Object> handleUnauthorizedRequestException(UnauthorizedRequestException e, WebRequest request) {
ErrorResource error = new ErrorResource("403", e.getMessage());
return new ResponseEntity<Object>(error, HttpStatus.FORBIDDEN);
}
@ExceptionHandler({DataServicesException.class})
protected ResponseEntity<Object> handleDataServicesException(DataServicesException e, WebRequest request) {
String code = (e.getShootrError() != null) ? e.getShootrError().getErrorCode() : "0000";
ErrorResource error = new ErrorResource(code, e.getMessage());
return new ResponseEntity<Object>(error, HttpStatus.UNPROCESSABLE_ENTITY);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment