Handle Jackson InvalidDefinitionException with 5xx status in WebFlux

Issue: SPR-14925
This commit is contained in:
Sebastien Deleuze
2017-04-11 11:46:49 +02:00
parent c4e0d6c2a2
commit 23e35c0e1a
5 changed files with 95 additions and 6 deletions

View File

@@ -23,6 +23,8 @@ import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.core.*;
import org.springframework.core.codec.InternalCodecException;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -150,8 +152,12 @@ public abstract class AbstractMessageReaderArgumentResolver extends HandlerMetho
return Mono.error(new UnsupportedMediaTypeStatusException(mediaType, this.supportedMediaTypes));
}
private ServerWebInputException getReadError(MethodParameter parameter, Throwable ex) {
return new ServerWebInputException("Failed to read HTTP message", parameter, ex instanceof ResponseStatusException ? ex.getCause() : ex);
private ResponseStatusException getReadError(MethodParameter parameter, Throwable ex) {
Throwable cause = ex instanceof ResponseStatusException ? ex.getCause() : ex;
return cause instanceof InternalCodecException ?
new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Failed to read HTTP message", cause) :
new ServerWebInputException("Failed to read HTTP message", parameter, cause);
}
private ServerWebInputException getRequiredBodyError(MethodParameter parameter) {