diff --git a/http-generator-helidon/src/main/java/io/avaje/http/generator/helidon/nima/NimaPlatformAdapter.java b/http-generator-helidon/src/main/java/io/avaje/http/generator/helidon/nima/NimaPlatformAdapter.java
index a33ce1df..61bc63f5 100644
--- a/http-generator-helidon/src/main/java/io/avaje/http/generator/helidon/nima/NimaPlatformAdapter.java
+++ b/http-generator-helidon/src/main/java/io/avaje/http/generator/helidon/nima/NimaPlatformAdapter.java
@@ -118,8 +118,8 @@ public void writeReadMapParameter(Append writer, ParamType paramType) {
@Override
public void writeReadCollectionParameter(Append writer, ParamType paramType, String paramName) {
switch (paramType) {
- case QUERYPARAM -> writer.append("queryParams.all(\"%s\")", paramName);
- case FORMPARAM -> writer.append("formParams.all(\"%s\")", paramName);
+ case QUERYPARAM -> writer.append("queryParams.all(\"%s\", () -> java.util.List.of())", paramName);
+ case FORMPARAM -> writer.append("formParams.all(\"%s\", () -> java.util.List.of())", paramName);
case HEADER -> writer.append(
"req.headers().all(\"%s\", () -> java.util.List.of())", paramName);
diff --git a/tests/test-nima/pom.xml b/tests/test-nima/pom.xml
index 1b17a0b9..aff2380d 100644
--- a/tests/test-nima/pom.xml
+++ b/tests/test-nima/pom.xml
@@ -48,6 +48,12 @@
avaje-http-helidon-generator
${project.version}
+
+ io.avaje
+ avaje-http-client
+ ${project.version}
+ test
+
diff --git a/tests/test-nima/src/main/java/org/example/HelloController.java b/tests/test-nima/src/main/java/org/example/HelloController.java
index ae147fc9..8ae7994f 100644
--- a/tests/test-nima/src/main/java/org/example/HelloController.java
+++ b/tests/test-nima/src/main/java/org/example/HelloController.java
@@ -6,6 +6,8 @@
import io.avaje.http.api.Get;
import io.avaje.http.api.Produces;
+import java.util.List;
+
@Controller
public class HelloController {
@@ -33,4 +35,10 @@ String name(String name, String sortBy, @Default("0") long max) {
Person getP(@BeanParam Person person) {
return person;
}
+
+ @Produces("text/plain")
+ @Get("listParams")
+ String listParam(List codes) {
+ return "codes:" + codes;
+ }
}
diff --git a/tests/test-nima/src/test/java/org/example/BaseWebTest.java b/tests/test-nima/src/test/java/org/example/BaseWebTest.java
new file mode 100644
index 00000000..20e42a00
--- /dev/null
+++ b/tests/test-nima/src/test/java/org/example/BaseWebTest.java
@@ -0,0 +1,47 @@
+package org.example;
+
+import io.avaje.http.client.HttpClient;
+import io.avaje.inject.BeanScope;
+import io.helidon.webserver.WebServer;
+import io.helidon.webserver.http.HttpFeature;
+import io.helidon.webserver.http.HttpRouting;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+
+import java.time.Duration;
+import java.util.List;
+
+public class BaseWebTest {
+
+ static WebServer webServer;
+
+ public static String baseUrl;
+
+
+ @BeforeAll
+ public static void init() {
+ List routes = BeanScope.builder().build().list(HttpFeature.class);
+ final var builder = HttpRouting.builder();
+ routes.forEach(builder::addFeature);
+
+ webServer = WebServer.builder().addRouting(builder)
+ .port(9067)
+ .build()
+ .start();
+
+ baseUrl = "http://localhost:9067";
+ }
+
+ @AfterAll
+ public static void shutdown() {
+ webServer.stop();
+ }
+
+ public static HttpClient client() {
+ return HttpClient.builder()
+ .baseUrl(baseUrl)
+ .requestTimeout(Duration.ofMinutes(2))
+ //.bodyAdapter(new JacksonBodyAdapter())
+ .build();
+ }
+}
diff --git a/tests/test-nima/src/test/java/org/example/HelloControllerTest.java b/tests/test-nima/src/test/java/org/example/HelloControllerTest.java
new file mode 100644
index 00000000..78449344
--- /dev/null
+++ b/tests/test-nima/src/test/java/org/example/HelloControllerTest.java
@@ -0,0 +1,46 @@
+package org.example;
+
+import org.junit.jupiter.api.Test;
+import java.net.http.HttpResponse;
+
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class HelloControllerTest extends BaseWebTest {
+
+ @Test
+ void listParamOne() {
+ HttpResponse res = client().request()
+ .path("listParams")
+ .queryParam("codes", "123")
+ .GET()
+ .asPlainString();
+
+ assertThat(res.statusCode()).isEqualTo(200);
+ assertThat(res.body()).isEqualTo("codes:[123]");
+ }
+
+ @Test
+ void listParamMultiple() {
+ HttpResponse res = client().request()
+ .path("listParams")
+ .queryParam("codes", "123")
+ .queryParam("codes", "456")
+ .GET()
+ .asPlainString();
+
+ assertThat(res.statusCode()).isEqualTo(200);
+ assertThat(res.body()).isEqualTo("codes:[123, 456]");
+ }
+
+ @Test
+ void listParamEmpty() {
+ HttpResponse res = client().request()
+ .path("listParams")
+ .GET()
+ .asPlainString();
+
+ assertThat(res.statusCode()).isEqualTo(200);
+ assertThat(res.body()).isEqualTo("codes:[]");
+ }
+}