From e7093cac22f09eace33abf4d278dfc134c362a98 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 16 Jan 2025 14:01:04 +0100 Subject: [PATCH] Adopt to changes in Spring Framework 7. See #2449 --- .../rest/webmvc/json/DomainObjectReader.java | 4 +++- .../util/InputStreamHttpInputMessage.java | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/DomainObjectReader.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/DomainObjectReader.java index 6bcc4ed31..fa579b28c 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/DomainObjectReader.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/DomainObjectReader.java @@ -15,6 +15,7 @@ */ package org.springframework.data.rest.webmvc.json; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -211,7 +212,8 @@ T merge(ObjectNode source, T target, ObjectMapper mapper) { try { return doMerge(source, target, mapper); } catch (Exception o_O) { - throw new HttpMessageNotReadableException("Could not read payload", o_O); + throw new HttpMessageNotReadableException("Could not read payload", o_O, + InputStreamHttpInputMessage.of(() -> new ByteArrayInputStream(mapper.writeValueAsBytes(source)))); } } diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/util/InputStreamHttpInputMessage.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/util/InputStreamHttpInputMessage.java index b4f733111..b473d31c1 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/util/InputStreamHttpInputMessage.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/util/InputStreamHttpInputMessage.java @@ -16,33 +16,43 @@ package org.springframework.data.rest.webmvc.util; import java.io.InputStream; +import java.util.function.Supplier; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpInputMessage; import org.springframework.util.Assert; +import org.springframework.util.function.ThrowingSupplier; /** * {@link HttpInputMessage} based on a plain {@link InputStream}, i.e. exposing no headers. * * @author Oliver Drotbohm + * @author Mark Paluch */ public class InputStreamHttpInputMessage implements HttpInputMessage { - private final InputStream body; + private final Supplier body; - private InputStreamHttpInputMessage(final InputStream body) { + private InputStreamHttpInputMessage(Supplier body) { Assert.notNull(body, "InputStream must not be null"); this.body = body; } - public static InputStreamHttpInputMessage of(final InputStream body) { + public static InputStreamHttpInputMessage of(InputStream body) { + return new InputStreamHttpInputMessage(() -> body); + } + + /** + * @since 5.0 + */ + public static InputStreamHttpInputMessage of(ThrowingSupplier body) { return new InputStreamHttpInputMessage(body); } public InputStream getBody() { - return this.body; + return this.body.get(); } @Override