From a491639588bd0f695de982c7e663709bc9fcfff9 Mon Sep 17 00:00:00 2001 From: Rojewski Piotr Date: Tue, 3 Nov 2020 10:23:21 +0100 Subject: [PATCH 1/4] Scenario with multiple file in array. In such situation the field name of multipart is always same, but files in the sending payload are more than one. Using standard HashMap causes, that it's impossible to send more files on same field name. I propose to use here MultiValueMap. --- .../src/main/java/feign/form/spring/SpringFormEncoder.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java b/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java index 2ce3321..d77d44e 100644 --- a/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java +++ b/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java @@ -20,6 +20,7 @@ import static java.util.Collections.singletonMap; import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.HashMap; import feign.RequestTemplate; @@ -29,6 +30,7 @@ import feign.form.MultipartFormContentProcessor; import lombok.val; +import org.springframework.util.LinkedMultiValueMap; import org.springframework.web.multipart.MultipartFile; /** @@ -63,9 +65,9 @@ public SpringFormEncoder (Encoder delegate) { public void encode (Object object, Type bodyType, RequestTemplate template) throws EncodeException { if (bodyType.equals(MultipartFile[].class)) { val files = (MultipartFile[]) object; - val data = new HashMap(files.length, 1.F); + val data = new LinkedMultiValueMap(); for (val file : files) { - data.put(file.getName(), file); + data.computeIfAbsent(file.getName(), name -> new ArrayList<>()).add(file); } super.encode(data, MAP_STRING_WILDCARD, template); } else if (bodyType.equals(MultipartFile.class)) { From c8a47b873115a435687021fd7faa2873d0b1ac2f Mon Sep 17 00:00:00 2001 From: Rojewski Piotr Date: Tue, 3 Nov 2020 11:22:16 +0100 Subject: [PATCH 2/4] Fix travis build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 441e3ba..8762519 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: java jdk: - - oraclejdk8 + - openjdk8 install: ./mvnw --settings .settings.xml install -DskipTests=true -Dmaven.javadoc.skip=true -Dgpg.skip -B -V From b21668a5b5a90b1ce2a831ead82a276c5c835047 Mon Sep 17 00:00:00 2001 From: Rojewski Piotr Date: Tue, 3 Nov 2020 11:26:30 +0100 Subject: [PATCH 3/4] Simplify --- .../src/main/java/feign/form/spring/SpringFormEncoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java b/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java index d77d44e..e9fc319 100644 --- a/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java +++ b/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java @@ -67,7 +67,7 @@ public void encode (Object object, Type bodyType, RequestTemplate template) thro val files = (MultipartFile[]) object; val data = new LinkedMultiValueMap(); for (val file : files) { - data.computeIfAbsent(file.getName(), name -> new ArrayList<>()).add(file); + data.add(file.getName(), file); } super.encode(data, MAP_STRING_WILDCARD, template); } else if (bodyType.equals(MultipartFile.class)) { From 5be3f6bab6a0e9b6a53c06d0f23feaee4f2979fc Mon Sep 17 00:00:00 2001 From: Rojewski Piotr Date: Tue, 3 Nov 2020 12:03:18 +0100 Subject: [PATCH 4/4] Usused import --- .../src/main/java/feign/form/spring/SpringFormEncoder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java b/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java index e9fc319..a4a1b47 100644 --- a/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java +++ b/feign-form-spring/src/main/java/feign/form/spring/SpringFormEncoder.java @@ -20,7 +20,6 @@ import static java.util.Collections.singletonMap; import java.lang.reflect.Type; -import java.util.ArrayList; import java.util.HashMap; import feign.RequestTemplate;