Merge branch '6.1.x'

This commit is contained in:
rstoyanchev
2024-04-09 18:25:11 +01:00
6 changed files with 56 additions and 9 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2022 the original author or authors.
* Copyright 2002-2024 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.
@@ -100,8 +100,11 @@ public class RequestParamMethodArgumentResolver extends AbstractNamedValueSyncAr
@Override
@Nullable
protected Object resolveNamedValue(String name, MethodParameter parameter, ServerWebExchange exchange) {
List<String> paramValues = exchange.getRequest().getQueryParams().get(name);
Object result = null;
List<String> paramValues = exchange.getRequest().getQueryParams().get(name);
if (paramValues == null) {
paramValues = exchange.getRequest().getQueryParams().get(name + "[]");
}
if (paramValues != null) {
result = (paramValues.size() == 1 ? paramValues.get(0) : paramValues);
}

View File

@@ -53,7 +53,7 @@ class RequestParamMethodArgumentResolverTests {
private BindingContext bindContext;
private ResolvableMethod testMethod = ResolvableMethod.on(getClass()).named("handle").build();
private final ResolvableMethod testMethod = ResolvableMethod.on(getClass()).named("handle").build();
@BeforeEach
@@ -130,6 +130,16 @@ class RequestParamMethodArgumentResolverTests {
assertThat((String[]) result).isEqualTo(new String[] {"foo", "bar"});
}
@Test // gh-32577
void resolveStringArrayWithEmptyArraySuffix() {
MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(String[].class);
MockServerHttpRequest request = MockServerHttpRequest.get("/path?name[]=foo&name[]=bar").build();
Object result = resolve(param, MockServerWebExchange.from(request));
boolean condition = result instanceof String[];
assertThat(condition).isTrue();
assertThat((String[]) result).isEqualTo(new String[] {"foo", "bar"});
}
@Test
void resolveDefaultValue() {
MethodParameter param = this.testMethod.annot(requestParam().notRequired("bar")).arg(String.class);