From d76bd84466616f53e5eee6879fee9a823d767841 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 25 Jan 2017 11:47:11 -0700 Subject: [PATCH] Handle content-type with charset. A new version of httpclient introduced by boot changed the behaviour that previously allowed the charset. It now has to be parsed out and passed to the apache `ContentType` object explicitly. fixes gh-1649 --- .../route/SimpleHostRoutingFilter.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java index 0c1aa821..e9629c34 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java @@ -19,6 +19,7 @@ package org.springframework.cloud.netflix.zuul.filters.route; import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.nio.charset.Charset; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; @@ -275,9 +276,21 @@ public class SimpleHostRoutingFilter extends ZuulFilter { HttpHost httpHost = getHttpHost(host); uri = StringUtils.cleanPath((host.getPath() + uri).replaceAll("/{2,}", "/")); int contentLength = request.getContentLength(); - InputStreamEntity entity = new InputStreamEntity(requestEntity, contentLength, - request.getContentType() != null - ? ContentType.create(request.getContentType()) : null); + + ContentType contentType = null; + + if (request.getContentType() != null) { + String contentTypeString = request.getContentType(); + Charset charset = null; + if (contentTypeString.contains(";charset=")) { + final String[] split = contentTypeString.split(";charset="); + contentTypeString = split[0]; + charset = Charset.forName(split[1]); + } + contentType = ContentType.create(contentTypeString, charset); + } + + InputStreamEntity entity = new InputStreamEntity(requestEntity, contentLength, contentType); HttpRequest httpRequest = buildHttpRequest(verb, uri, entity, headers, params, request); try { @@ -409,4 +422,4 @@ public class SimpleHostRoutingFilter extends ZuulFilter { boolean isSslHostnameValidationEnabled() { return this.sslHostnameValidationEnabled; } -} \ No newline at end of file +}