diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java b/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java index f24168c486..40a2e28ccb 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java @@ -303,6 +303,9 @@ public class DefaultHttpHeaderMapper implements HeaderMapper { Map target = new HashMap(); Set headerNames = source.keySet(); for (String name : headerNames) { + if (name.startsWith(userDefinedHeaderPrefix)){ + name = name.substring(userDefinedHeaderPrefix.length()); + } if (this.shouldMapInboundHeader(name)) { if (!ObjectUtils.containsElement(HTTP_REQUEST_HEADER_NAMES, name) && !ObjectUtils.containsElement(HTTP_RESPONSE_HEADER_NAMES, name)) { String prefixedName = name.startsWith(this.userDefinedHeaderPrefix) ? name : this.userDefinedHeaderPrefix + name; diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java index 2aae0e0114..09a2239fba 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java @@ -581,5 +581,38 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests { assertEquals("abc", messageHeaders.get("foobar")); assertEquals("text/html", messageHeaders.get("Content-Type").toString()); } + + @Test + public void validateCustomHeaderAndPrefixWithHeaderNamePatternsAndStandardResponseHeaders() throws ParseException{ + DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper(); + mapper.setInboundHeaderNames(new String[]{"foo*", "HTTP_RESPONSE_HEADERS"}); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.set("X-foobar", "abc"); + httpHeaders.setContentType(MediaType.TEXT_HTML); + httpHeaders.setAccept(Collections.singletonList(MediaType.TEXT_HTML)); + Map messageHeaders = mapper.toHeaders(httpHeaders); + assertEquals(2, messageHeaders.size()); + assertNull(messageHeaders.get("Accept")); + assertEquals("abc", messageHeaders.get("foobar")); + assertEquals("text/html", messageHeaders.get("Content-Type").toString()); + } + + @Test + public void validateCustomHeaderAndCustomPrefixWithHeaderNamePatternsAndStandardResponseHeaders() throws ParseException{ + DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper(); + mapper.setUserDefinedHeaderPrefix("BOO-"); + mapper.setInboundHeaderNames(new String[]{"foo*", "HTTP_RESPONSE_HEADERS"}); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.set("BOO-foobar", "abc"); + httpHeaders.set("barr", "barr"); + httpHeaders.set("X-barr", "x-barr"); + httpHeaders.setContentType(MediaType.TEXT_HTML); + httpHeaders.setAccept(Collections.singletonList(MediaType.TEXT_HTML)); + Map messageHeaders = mapper.toHeaders(httpHeaders); + assertEquals(2, messageHeaders.size()); + assertNull(messageHeaders.get("Accept")); + assertEquals("abc", messageHeaders.get("foobar")); + assertEquals("text/html", messageHeaders.get("Content-Type").toString()); + } }