diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ByteBufferConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ByteBufferConverter.java index 43a94eeac7..16fd466caf 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ByteBufferConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ByteBufferConverter.java @@ -97,6 +97,7 @@ final class ByteBufferConverter implements ConditionalGenericConverter { private Object convertFromByteBuffer(ByteBuffer source, TypeDescriptor targetType) { byte[] bytes = new byte[source.remaining()]; source.get(bytes); + if (targetType.isAssignableTo(BYTE_ARRAY_TYPE)) { return bytes; } @@ -113,9 +114,7 @@ final class ByteBufferConverter implements ConditionalGenericConverter { // Extra cast necessary for compiling on JDK 9 plus running on JDK 8, since // otherwise the overridden ByteBuffer-returning rewind method would be chosen // which isn't available on JDK 8. - ((Buffer) byteBuffer).rewind(); - - return byteBuffer; + return ((Buffer) byteBuffer).rewind(); } } diff --git a/spring-core/src/test/java/org/springframework/core/convert/support/ByteBufferConverterTests.java b/spring-core/src/test/java/org/springframework/core/convert/support/ByteBufferConverterTests.java index e3ecf541ad..3fc8d74fdf 100644 --- a/spring-core/src/test/java/org/springframework/core/convert/support/ByteBufferConverterTests.java +++ b/spring-core/src/test/java/org/springframework/core/convert/support/ByteBufferConverterTests.java @@ -49,8 +49,8 @@ public class ByteBufferConverterTests { public void byteArrayToByteBuffer() throws Exception { byte[] bytes = new byte[] { 1, 2, 3 }; ByteBuffer convert = this.conversionService.convert(bytes, ByteBuffer.class); - assertThat(bytes, not(sameInstance(convert.array()))); - assertThat(bytes, equalTo(convert.array())); + assertThat(convert.array(), not(sameInstance(bytes))); + assertThat(convert.array(), equalTo(bytes)); } @Test @@ -58,8 +58,8 @@ public class ByteBufferConverterTests { byte[] bytes = new byte[] { 1, 2, 3 }; ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); byte[] convert = this.conversionService.convert(byteBuffer, byte[].class); - assertThat(bytes, not(sameInstance(convert))); - assertThat(bytes, equalTo(convert)); + assertThat(convert, not(sameInstance(bytes))); + assertThat(convert, equalTo(bytes)); } @Test @@ -67,8 +67,8 @@ public class ByteBufferConverterTests { byte[] bytes = new byte[] { 1, 2, 3 }; ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); OtherType convert = this.conversionService.convert(byteBuffer, OtherType.class); - assertThat(bytes, not(sameInstance(convert.bytes))); - assertThat(bytes, equalTo(convert.bytes)); + assertThat(convert.bytes, not(sameInstance(bytes))); + assertThat(convert.bytes, equalTo(bytes)); } @Test @@ -76,8 +76,17 @@ public class ByteBufferConverterTests { byte[] bytes = new byte[] { 1, 2, 3 }; OtherType otherType = new OtherType(bytes); ByteBuffer convert = this.conversionService.convert(otherType, ByteBuffer.class); - assertThat(bytes, not(sameInstance(convert.array()))); - assertThat(bytes, equalTo(convert.array())); + assertThat(convert.array(), not(sameInstance(bytes))); + assertThat(convert.array(), equalTo(bytes)); + } + + @Test + public void byteBufferToByteBuffer() throws Exception { + byte[] bytes = new byte[] { 1, 2, 3 }; + ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); + ByteBuffer convert = this.conversionService.convert(byteBuffer, ByteBuffer.class); + assertThat(convert, not(sameInstance(byteBuffer.rewind()))); + assertThat(convert, equalTo(byteBuffer.rewind())); }