From c795bd16a7748749af2d84ad1520caa481bb1fe2 Mon Sep 17 00:00:00 2001 From: Roman Terentiev Date: Fri, 10 Feb 2017 19:25:27 +0200 Subject: [PATCH] #1203 Improve filter performance by using only one instance of AllEncompassingFormHttpMessageConverter (#1681) --- .../zuul/filters/pre/FormBodyWrapperFilter.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java index 8e6bb258..175c5cfb 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java @@ -31,6 +31,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpOutputMessage; import org.springframework.http.InvalidMediaTypeException; import org.springframework.http.MediaType; +import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; import org.springframework.util.Assert; import org.springframework.util.MultiValueMap; @@ -52,10 +53,16 @@ import static org.springframework.cloud.netflix.zuul.filters.support.FilterConst */ public class FormBodyWrapperFilter extends ZuulFilter { + private FormHttpMessageConverter formHttpMessageConverter; private Field requestField; private Field servletRequestField; public FormBodyWrapperFilter() { + this(new AllEncompassingFormHttpMessageConverter()); + } + + public FormBodyWrapperFilter(FormHttpMessageConverter formHttpMessageConverter) { + this.formHttpMessageConverter = formHttpMessageConverter; this.requestField = ReflectionUtils.findField(HttpServletRequestWrapper.class, "req", HttpServletRequest.class); this.servletRequestField = ReflectionUtils.findField(ServletRequestWrapper.class, @@ -139,8 +146,6 @@ public class FormBodyWrapperFilter extends ZuulFilter { private int contentLength; - private AllEncompassingFormHttpMessageConverter converter = new AllEncompassingFormHttpMessageConverter(); - public FormBodyRequestWrapper(HttpServletRequest request) { super(request); this.request = request; @@ -184,7 +189,7 @@ public class FormBodyWrapperFilter extends ZuulFilter { this.contentType = MediaType.valueOf(this.request.getContentType()); data.getHeaders().setContentType(this.contentType); - this.converter.write(builder, this.contentType, data); + FormBodyWrapperFilter.this.formHttpMessageConverter.write(builder, this.contentType, data); // copy new content type including multipart boundary this.contentType = data.getHeaders().getContentType(); this.contentData = data.getInput();