diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java index ac31d20ec7..3da1c7877c 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 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. @@ -221,6 +221,9 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter { return this.objectMapper.readValue((byte[]) payload, javaType); } } + else if (targetClass.isInstance(payload)) { + return payload; + } else { if (view != null) { return this.objectMapper.readerWithView(view).forType(javaType).readValue(payload.toString()); diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java index 0980455786..3410441348 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 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. @@ -110,6 +110,14 @@ public class MappingJackson2MessageConverterTests { assertEquals("AQI=", actual.get("bytes")); } + @Test // gh-22386 + public void fromMessageMatchingInstance() { + MyBean myBean = new MyBean(); + MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); + Message message = MessageBuilder.withPayload(myBean).build(); + assertSame(myBean, converter.fromMessage(message, MyBean.class)); + } + @Test(expected = MessageConversionException.class) public void fromMessageInvalidJson() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();