From 1e13e1489cbe9e07d207636385e677fcbc8a825a Mon Sep 17 00:00:00 2001 From: David Schlosnagle Date: Tue, 18 Jun 2019 11:11:23 -0400 Subject: [PATCH 1/2] JacksonEncoder avoids intermediate String request body Serialize Jackson request object directly to UTF-8 byte array without intermediate String representation. See https://github.com/FasterXML/jackson-docs/wiki/Presentation:-Jackson-Performance#basics-things-you-should-do-anyway --- jackson/src/main/java/feign/jackson/JacksonEncoder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jackson/src/main/java/feign/jackson/JacksonEncoder.java b/jackson/src/main/java/feign/jackson/JacksonEncoder.java index 125ac5dd60..6399bdfd1a 100644 --- a/jackson/src/main/java/feign/jackson/JacksonEncoder.java +++ b/jackson/src/main/java/feign/jackson/JacksonEncoder.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; import java.util.Collections; import feign.RequestTemplate; import feign.codec.EncodeException; @@ -48,7 +49,7 @@ public JacksonEncoder(ObjectMapper mapper) { public void encode(Object object, Type bodyType, RequestTemplate template) { try { JavaType javaType = mapper.getTypeFactory().constructType(bodyType); - template.body(mapper.writerFor(javaType).writeValueAsString(object)); + template.body(mapper.writerFor(javaType).writeValueAsBytes(object), StandardCharsets.UTF_8); } catch (JsonProcessingException e) { throw new EncodeException(e.getMessage(), e); } From 080fa92ce5696ef61e25a3dc9687c414caecbc41 Mon Sep 17 00:00:00 2001 From: David Schlosnagle Date: Tue, 18 Jun 2019 18:33:43 -0400 Subject: [PATCH 2/2] Use Util.UTF_8 --- jackson/src/main/java/feign/jackson/JacksonEncoder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jackson/src/main/java/feign/jackson/JacksonEncoder.java b/jackson/src/main/java/feign/jackson/JacksonEncoder.java index 6399bdfd1a..91d21ae344 100644 --- a/jackson/src/main/java/feign/jackson/JacksonEncoder.java +++ b/jackson/src/main/java/feign/jackson/JacksonEncoder.java @@ -20,11 +20,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import java.lang.reflect.Type; -import java.nio.charset.StandardCharsets; import java.util.Collections; import feign.RequestTemplate; import feign.codec.EncodeException; import feign.codec.Encoder; +import feign.Util; public class JacksonEncoder implements Encoder { @@ -49,7 +49,7 @@ public JacksonEncoder(ObjectMapper mapper) { public void encode(Object object, Type bodyType, RequestTemplate template) { try { JavaType javaType = mapper.getTypeFactory().constructType(bodyType); - template.body(mapper.writerFor(javaType).writeValueAsBytes(object), StandardCharsets.UTF_8); + template.body(mapper.writerFor(javaType).writeValueAsBytes(object), Util.UTF_8); } catch (JsonProcessingException e) { throw new EncodeException(e.getMessage(), e); }