Skip to content

Commit

Permalink
Fixed and improved rest endpoint validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Alf-Melmac committed Apr 12, 2021
1 parent 91c0bc0 commit 85fa883
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,11 @@
<artifactId>validation-api</artifactId>
<version>${javax.validation.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>${springframework.boot.version}</version>
</dependency>

<dependency>
<groupId>org.jsoup</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,22 @@

import de.webalf.slotbot.util.StringUtils;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.stream.Collectors;

/**
* Handles exceptions thrown in all layers.
Expand All @@ -34,6 +41,19 @@ protected ResponseEntity<?> handleConflict(RuntimeException ex, HttpServletReque
determineHttpStatus(ex));
}

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
final List<FieldError> fieldErrors = ex.getBindingResult().getFieldErrors();
final String errorMessage = fieldErrors.stream().map(FieldError::getField).collect(Collectors.joining(", "));

return new ResponseEntity<>(
ExceptionResponse.builder()
.errorMessage(errorMessage + (fieldErrors.size() > 1 ? " are invalid." : errorMessage + " is invalid.") + " Missing mandatory field?")
.requestedURI(((ServletWebRequest) request).getRequest().getRequestURI())
.build(),
HttpStatus.BAD_REQUEST);
}

/**
* Uses the Annotation from the Exception if available
*
Expand Down

0 comments on commit 85fa883

Please sign in to comment.