From 4a1e637b83f51096f93660bf75c142c3c2251ba0 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 24 May 2016 09:01:34 +0100 Subject: [PATCH] Fix content type when missing from incoming request If there is no content type incoming, then it should be absent in the outgoing request (not "null"). Fixes gh-1037 --- .../filters/route/SimpleHostRoutingFilter.java | 3 ++- .../zuul/SampleZuulProxyApplicationTests.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) 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 90a5e855..fe0b8fa1 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 @@ -258,7 +258,8 @@ public class SimpleHostRoutingFilter extends ZuulFilter { HttpRequest httpRequest; int contentLength = request.getContentLength(); InputStreamEntity entity = new InputStreamEntity(requestEntity, contentLength, - ContentType.create(request.getContentType())); + request.getContentType() != null + ? ContentType.create(request.getContentType()) : null); switch (verb.toUpperCase()) { case "POST": HttpPost httpPost = new HttpPost(uri + this.helper.getQueryString(params)); diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java index 8b2e1279..acab11cd 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java @@ -157,6 +157,17 @@ public class SampleZuulProxyApplicationTests extends ZuulProxyTestBase { assertEquals("/query?foo=weird#chars", result.getBody()); } + @Test + public void simpleHostRouteWithContentType() { + this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/"); + this.endpoint.reset(); + ResponseEntity result = new TestRestTemplate().exchange( + "http://localhost:" + this.port + "/self/content-type", HttpMethod.POST, + new HttpEntity<>((Void) null), String.class); + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals("", result.getBody()); + } + @Test public void ribbonCommandForbidden() { ResponseEntity result = new TestRestTemplate().exchange( @@ -223,6 +234,12 @@ class SampleZuulProxyApplication extends ZuulProxyTestBase.AbstractZuulProxyAppl return request.getRequestURI(); } + @RequestMapping("/content-type") + public String contentType(HttpServletRequest request) { + String header = request.getHeader("Content-Type"); + return header == null ? "" : header; + } + @RequestMapping("/add-header") public ResponseEntity addHeader(HttpServletRequest request) { HttpHeaders headers = new HttpHeaders();