From 9b550f7293f6e5f078437ba4f0d5ac65d6bc59f5 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 31 Aug 2016 11:43:05 -0600 Subject: [PATCH] Support delete with body in zuul where possible. The apache http client and ok http client support delete with body, ribbon rest client does not. fixes gh-949 --- .../route/RestClientRibbonCommand.java | 10 ++++- .../filters/route/RibbonRoutingFilter.java | 4 -- .../route/RestClientRibbonCommandTests.java | 21 ++++++++--- ...tpClientRibbonCommandIntegrationTests.java | 5 --- .../OkHttpRibbonCommandIntegrationTests.java | 5 --- ...stClientRibbonCommandIntegrationTests.java | 5 +++ .../route/support/ZuulProxyTestBase.java | 37 +++++++++++++++++-- 7 files changed, 64 insertions(+), 23 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java index b5423ce7..d8fb01ed 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java @@ -55,9 +55,17 @@ public class RestClientRibbonCommand extends AbstractRibbonCommand result = new TestRestTemplate().exchange( + "http://localhost:" + this.port + "/simple/deletewithbody", HttpMethod.DELETE, + new HttpEntity<>("deleterequestbody"), String.class); + assertEquals(HttpStatus.OK, result.getStatusCode()); + if (supportsDeleteWithBody()) { + assertEquals("Deleted deleterequestbody", result.getBody()); + } else { + assertEquals("Deleted null", result.getBody()); + } + } + @Test public void ribbonRouteWithNonExistentUri() { String uri = "/simple/nonExistent"; @@ -272,8 +300,6 @@ public abstract class ZuulProxyTestBase { assertEquals("Posted [(bar)] and Content-Length was: 13!", result.getBody()); } - protected abstract boolean supportsPatch(); - public static abstract class AbstractZuulProxyApplication extends DelegatingWebMvcConfiguration { @@ -297,7 +323,12 @@ public abstract class ZuulProxyTestBase { public String postWithFormParam(HttpServletRequest request, @RequestBody MultiValueMap body) { return "Posted " + body.get("foo") + " and Content-Length was: " + request.getContentLength() + "!"; - } + } + + @RequestMapping(value = "/deletewithbody", method = RequestMethod.DELETE) + public String deleteWithBody(@RequestBody(required = false) String body) { + return "Deleted " + body; + } @RequestMapping(value = "/local/{id}", method = RequestMethod.DELETE) public String delete(@PathVariable String id) {