diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java index e60de76d1d..b136e3fbcf 100644 --- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -244,9 +244,10 @@ public class ServletServerHttpRequest implements ServerHttpRequest { Writer writer = new OutputStreamWriter(bos, FORM_CHARSET); Map form = request.getParameterMap(); - for (Iterator nameIterator = form.keySet().iterator(); nameIterator.hasNext();) { - String name = nameIterator.next(); - List values = Arrays.asList(form.get(name)); + for (Iterator> entryIterator = form.entrySet().iterator(); entryIterator.hasNext();) { + Map.Entry entry = entryIterator.next(); + String name = entry.getKey(); + List values = Arrays.asList(entry.getValue()); for (Iterator valueIterator = values.iterator(); valueIterator.hasNext();) { String value = valueIterator.next(); writer.write(URLEncoder.encode(name, FORM_CHARSET.name())); @@ -258,7 +259,7 @@ public class ServletServerHttpRequest implements ServerHttpRequest { } } } - if (nameIterator.hasNext()) { + if (entryIterator.hasNext()) { writer.append('&'); } } diff --git a/spring-web/src/test/java/org/springframework/http/server/ServletServerHttpRequestTests.java b/spring-web/src/test/java/org/springframework/http/server/ServletServerHttpRequestTests.java index 336289185e..de0779a4c3 100644 --- a/spring-web/src/test/java/org/springframework/http/server/ServletServerHttpRequestTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/ServletServerHttpRequestTests.java @@ -175,4 +175,14 @@ public class ServletServerHttpRequestTests { assertThat(result).as("Invalid content returned").isEqualTo(content); } + @Test + void getEmptyFormBody() throws IOException { + mockRequest.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); + mockRequest.setMethod("POST"); + + byte[] result = FileCopyUtils.copyToByteArray(request.getBody()); + byte[] content = "".getBytes(StandardCharsets.UTF_8); + assertThat(result).as("Invalid content returned").isEqualTo(content); + } + }