diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java index b1cea0cbb4..41f9420d8b 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java @@ -18,7 +18,7 @@ package org.springframework.web.multipart.support; import java.util.Collections; import java.util.Enumeration; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -75,22 +75,6 @@ public class DefaultMultipartHttpServletRequest extends AbstractMultipartHttpSer } - @Override - public Enumeration getParameterNames() { - Map multipartParameters = getMultipartParameters(); - if (multipartParameters.isEmpty()) { - return super.getParameterNames(); - } - - Set paramNames = new LinkedHashSet(); - Enumeration paramEnum = super.getParameterNames(); - while (paramEnum.hasMoreElements()) { - paramNames.add(paramEnum.nextElement()); - } - paramNames.addAll(multipartParameters.keySet()); - return Collections.enumeration(paramNames); - } - @Override public String getParameter(String name) { String[] values = getMultipartParameters().get(name); @@ -109,11 +93,32 @@ public class DefaultMultipartHttpServletRequest extends AbstractMultipartHttpSer return super.getParameterValues(name); } + @Override + public Enumeration getParameterNames() { + Map multipartParameters = getMultipartParameters(); + if (multipartParameters.isEmpty()) { + return super.getParameterNames(); + } + + Set paramNames = new LinkedHashSet(); + Enumeration paramEnum = super.getParameterNames(); + while (paramEnum.hasMoreElements()) { + paramNames.add(paramEnum.nextElement()); + } + paramNames.addAll(multipartParameters.keySet()); + return Collections.enumeration(paramNames); + } + @Override public Map getParameterMap() { - Map paramMap = new HashMap(); + Map multipartParameters = getMultipartParameters(); + if (multipartParameters.isEmpty()) { + return super.getParameterMap(); + } + + Map paramMap = new LinkedHashMap(); paramMap.putAll(super.getParameterMap()); - paramMap.putAll(getMultipartParameters()); + paramMap.putAll(multipartParameters); return paramMap; } diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java index 90cb3d6386..4f077c3f1b 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java @@ -23,7 +23,9 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Enumeration; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; +import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Part; @@ -138,6 +140,8 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe return super.getParameterNames(); } + // Servlet 3.0 getParameterNames() not guaranteed to include multipart form items + // (e.g. on WebLogic 12) -> need to merge them here to be on the safe side Set paramNames = new LinkedHashSet(); Enumeration paramEnum = super.getParameterNames(); while (paramEnum.hasMoreElements()) { @@ -147,6 +151,27 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe return Collections.enumeration(paramNames); } + @Override + public Map getParameterMap() { + if (this.multipartParameterNames == null) { + initializeMultipart(); + } + if (this.multipartParameterNames.isEmpty()) { + return super.getParameterMap(); + } + + // Servlet 3.0 getParameterMap() not guaranteed to include multipart form items + // (e.g. on WebLogic 12) -> need to merge them here to be on the safe side + Map paramMap = new LinkedHashMap(); + paramMap.putAll(super.getParameterMap()); + for (String paramName : this.multipartParameterNames) { + if (!paramMap.containsKey(paramName)) { + paramMap.put(paramName, getParameterValues(paramName)); + } + } + return paramMap; + } + @Override public String getMultipartContentType(String paramOrFileName) { try {