RestExceptionHandler.java 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package DTO.error;
  2. import io.zipcoder.tc_spring_poll_application.Exception.ResourceNotFoundException;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.context.MessageSource;
  5. import org.springframework.http.HttpStatus;
  6. import org.springframework.http.ResponseEntity;
  7. import org.springframework.validation.FieldError;
  8. import org.springframework.web.bind.MethodArgumentNotValidException;
  9. import org.springframework.web.bind.annotation.ControllerAdvice;
  10. import org.springframework.web.bind.annotation.ExceptionHandler;
  11. import javax.servlet.http.HttpServletRequest;
  12. import java.util.ArrayList;
  13. import java.util.Date;
  14. import java.util.List;
  15. @ControllerAdvice
  16. public class RestExceptionHandler {
  17. @Autowired
  18. MessageSource messageSource;
  19. @ExceptionHandler(ResourceNotFoundException.class)
  20. public ResponseEntity<?> handleResourceNotFoundException(ResourceNotFoundException rnfe, HttpServletRequest request){
  21. ErrorDetail errorDetail = new ErrorDetail();
  22. errorDetail.setDetail(rnfe.getCause().toString());
  23. errorDetail.setTitle(rnfe.getMessage());
  24. errorDetail.setDeveloperMessage(rnfe.getLocalizedMessage());
  25. errorDetail.setTimestamp(new Date().getTime());
  26. return new ResponseEntity<>(errorDetail, HttpStatus.NOT_FOUND);
  27. }
  28. @ExceptionHandler(MethodArgumentNotValidException.class)
  29. public ResponseEntity<?> handleValidationError( MethodArgumentNotValidException manve, HttpServletRequest request) {
  30. ErrorDetail errorDetail = new ErrorDetail();
  31. List<FieldError> fieldErrors = manve.getBindingResult().getFieldErrors();
  32. for (FieldError fe : fieldErrors) {
  33. List<ValidationError> validationErrorList = errorDetail.getErrors().get(fe.getField());
  34. if (validationErrorList == null) {
  35. validationErrorList = new ArrayList<>();
  36. errorDetail.getErrors().put(fe.getField(), validationErrorList);
  37. }
  38. ValidationError validationError = new ValidationError();
  39. validationError.setCode(fe.getCode());
  40. validationError.setMessage(messageSource.getMessage(fe, null));
  41. validationErrorList.add(validationError);
  42. }
  43. return new ResponseEntity<>(errorDetail, HttpStatus.BAD_REQUEST);
  44. }
  45. }