diff --git a/spring-core/src/test/java/org/springframework/util/StreamUtilsTests.java b/spring-core/src/test/java/org/springframework/util/StreamUtilsTests.java index fe72f5bde83..f3391d4da8e 100644 --- a/spring-core/src/test/java/org/springframework/util/StreamUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/util/StreamUtilsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,6 +45,7 @@ class StreamUtilsTests { private String string = ""; + @BeforeEach void setup() { new Random().nextBytes(bytes); @@ -53,6 +54,7 @@ class StreamUtilsTests { } } + @Test void copyToByteArray() throws Exception { InputStream inputStream = new ByteArrayInputStream(bytes); @@ -127,4 +129,5 @@ class StreamUtilsTests { ordered.verify(source).write(bytes, 1, 2); ordered.verify(source, never()).close(); } + } 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 cc31b444e75..8c60749ba12 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 @@ -81,6 +81,7 @@ 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; @@ -123,7 +107,6 @@ public class ResourceRegionHttpMessageConverter extends AbstractGenericHttpMessa } @Override - @SuppressWarnings("unchecked") protected void writeInternal(Object object, @Nullable Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { @@ -131,16 +114,33 @@ public class ResourceRegionHttpMessageConverter extends AbstractGenericHttpMessa writeResourceRegion((ResourceRegion) object, outputMessage); } else { + @SuppressWarnings("unchecked") Collection regions = (Collection) object; if (regions.size() == 1) { writeResourceRegion(regions.iterator().next(), outputMessage); } else { - writeResourceRegionCollection((Collection) object, outputMessage); + writeResourceRegionCollection(regions, outputMessage); } } } + @Override + protected MediaType getDefaultContentType(Object object) { + Resource resource = null; + if (object instanceof ResourceRegion) { + resource = ((ResourceRegion) object).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); + } + protected void writeResourceRegion(ResourceRegion region, HttpOutputMessage outputMessage) throws IOException { Assert.notNull(region, "ResourceRegion must not be null");