From d4ddbd537bc78f63ab91a16b9ad193d677d3ba01 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 23 Apr 2024 13:16:33 +0200 Subject: [PATCH] Polishing --- .../ResourceHttpMessageConverter.java | 37 +++++---- .../ResourceRegionHttpMessageConverter.java | 75 ++++++++++--------- 2 files changed, 59 insertions(+), 53 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java index 90c89b7239..c6c484bfbf 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java @@ -108,6 +108,23 @@ public class ResourceHttpMessageConverter extends AbstractHttpMessageConverter regions = (Collection) object; - if (!regions.isEmpty()) { - resource = regions.iterator().next().getResource(); - } - } - return MediaTypeFactory.getMediaType(resource).orElse(MediaType.APPLICATION_OCTET_STREAM); - } - @Override public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return false; @@ -138,6 +122,43 @@ public class ResourceRegionHttpMessageConverter extends AbstractGenericHttpMessa } } + @Override + protected MediaType getDefaultContentType(Object object) { + Resource resource = null; + if (object instanceof ResourceRegion resourceRegion) { + resource = resourceRegion.getResource(); + } + else { + @SuppressWarnings("unchecked") + Collection regions = (Collection) object; + if (!regions.isEmpty()) { + resource = regions.iterator().next().getResource(); + } + } + return MediaTypeFactory.getMediaType(resource).orElse(MediaType.APPLICATION_OCTET_STREAM); + } + + @Override + protected boolean supportsRepeatableWrites(Object object) { + if (object instanceof ResourceRegion resourceRegion) { + return supportsRepeatableWrites(resourceRegion); + } + else { + @SuppressWarnings("unchecked") + Collection regions = (Collection) object; + for (ResourceRegion region : regions) { + if (!supportsRepeatableWrites(region)) { + return false; + } + } + return true; + } + } + + private boolean supportsRepeatableWrites(ResourceRegion region) { + return !(region.getResource() instanceof InputStreamResource); + } + protected void writeResourceRegion(ResourceRegion region, HttpOutputMessage outputMessage) throws IOException { Assert.notNull(region, "ResourceRegion must not be null"); @@ -239,24 +260,4 @@ public class ResourceRegionHttpMessageConverter extends AbstractGenericHttpMessa os.write(buf.getBytes(StandardCharsets.US_ASCII)); } - @Override - @SuppressWarnings("unchecked") - protected boolean supportsRepeatableWrites(Object object) { - if (object instanceof ResourceRegion resourceRegion) { - return supportsRepeatableWrites(resourceRegion); - } - else { - Collection regions = (Collection) object; - for (ResourceRegion region : regions) { - if (!supportsRepeatableWrites(region)) { - return false; - } - } - return true; - } - } - - private boolean supportsRepeatableWrites(ResourceRegion region) { - return !(region.getResource() instanceof InputStreamResource); - } }