diff --git a/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/ValidationReportHandler.java b/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/ValidationReportHandler.java index 51f6d181..f6344bd3 100644 --- a/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/ValidationReportHandler.java +++ b/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/ValidationReportHandler.java @@ -83,8 +83,6 @@ private OpenApiViolation buildOpenApiViolation( private boolean isViolationExcluded(OpenApiViolation openApiViolation) { return violationExclusions.isExcluded(openApiViolation) - // JSON parse errors should be ignored as it can't be compared to the schema then (this also prevents logging personal data!) - || openApiViolation.getMessage().startsWith("Unable to parse JSON") // If it matches more than 1, then we don't want to log a validation error || openApiViolation.getMessage().matches( ".*\\[Path '[^']+'] Instance failed to match exactly one schema \\(matched [1-9][0-9]* out of \\d\\).*"); diff --git a/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java b/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java index 3b25ea01..c883a4f7 100644 --- a/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java +++ b/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java @@ -10,6 +10,7 @@ import org.springframework.http.server.reactive.ServerHttpRequestDecorator; import org.springframework.lang.NonNull; import reactor.core.publisher.Flux; +import reactor.core.publisher.SignalType; public class BodyCachingServerHttpRequestDecorator extends ServerHttpRequestDecorator { private final TrafficSelector trafficSelector; @@ -38,11 +39,17 @@ public Flux getBody() { return super.getBody(); } - return super.getBody().doOnNext(dataBuffer -> { - cachedBody = dataBuffer.toString(StandardCharsets.UTF_8); - if (onBodyCachedListener != null) { - onBodyCachedListener.run(); - } - }); + return super.getBody() + .doOnNext(dataBuffer -> { + if (cachedBody == null) { + cachedBody = ""; + } + cachedBody += dataBuffer.toString(StandardCharsets.UTF_8); + }) + .doFinally(signalType -> { + if (signalType == SignalType.ON_COMPLETE && onBodyCachedListener != null) { + onBodyCachedListener.run(); + } + }); } } diff --git a/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java b/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java index 3b25ea01..c883a4f7 100644 --- a/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java +++ b/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java @@ -10,6 +10,7 @@ import org.springframework.http.server.reactive.ServerHttpRequestDecorator; import org.springframework.lang.NonNull; import reactor.core.publisher.Flux; +import reactor.core.publisher.SignalType; public class BodyCachingServerHttpRequestDecorator extends ServerHttpRequestDecorator { private final TrafficSelector trafficSelector; @@ -38,11 +39,17 @@ public Flux getBody() { return super.getBody(); } - return super.getBody().doOnNext(dataBuffer -> { - cachedBody = dataBuffer.toString(StandardCharsets.UTF_8); - if (onBodyCachedListener != null) { - onBodyCachedListener.run(); - } - }); + return super.getBody() + .doOnNext(dataBuffer -> { + if (cachedBody == null) { + cachedBody = ""; + } + cachedBody += dataBuffer.toString(StandardCharsets.UTF_8); + }) + .doFinally(signalType -> { + if (signalType == SignalType.ON_COMPLETE && onBodyCachedListener != null) { + onBodyCachedListener.run(); + } + }); } }