Fix URLBuilder#addParametersIfAbsent (#7837)

This commit is contained in:
passer 2021-05-23 21:11:07 +08:00 committed by GitHub
parent 48ba293ef3
commit 5977a2d455
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 1 deletions

View File

@ -336,7 +336,9 @@ public final class URLBuilder extends ServiceConfigURL {
if (CollectionUtils.isEmptyMap(parameters)) {
return this;
}
this.parameters.putAll(parameters);
for(Map.Entry<String, String> entry : parameters.entrySet()) {
this.parameters.putIfAbsent(entry.getKey(), entry.getValue());
}
return this;
}

View File

@ -19,6 +19,8 @@ package org.apache.dubbo.common;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
@ -97,4 +99,46 @@ public class URLBuilderTest {
assertThat(url2.getVersion(), equalTo("1.0.0"));
assertThat(url2.getParameter("absentKey"), equalTo("absentValue"));
}
@Test
public void shouldAddParameters() {
URL url1 = URL.valueOf("dubbo://admin:hello1234@10.20.130.230:20880/context/path?version=1.0.0&application=morgan&key2=v2");
// string pairs test
URL url2 = URLBuilder.from(url1)
.addParameters("version", "1.0.0", "absentKey1", "absentValue1")
.build();
assertThat(url2.getParameter("version"), equalTo("1.0.0"));
assertThat(url2.getParameter("absentKey1"), equalTo("absentValue1"));
// map test
Map<String, String> parameters = new HashMap<String, String>(){
{
this.put("version", "2.0.0");
this.put("absentKey2", "absentValue2");
}
};
url2 = URLBuilder.from(url1)
.addParameters(parameters)
.build();
assertThat(url2.getParameter("version"), equalTo("2.0.0"));
assertThat(url2.getParameter("absentKey2"), equalTo("absentValue2"));
}
@Test
public void shouldAddParametersIfAbsent() {
URL url1 = URL.valueOf("dubbo://admin:hello1234@10.20.130.230:20880/context/path?version=1.0.0&application=morgan&key2=v2");
Map<String, String> parameters = new HashMap<String, String>(){
{
this.put("version", "2.0.0");
this.put("absentKey", "absentValue");
}
};
URL url2 = URLBuilder.from(url1)
.addParametersIfAbsent(parameters)
.build();
assertThat(url2.getParameter("version"), equalTo("1.0.0"));
assertThat(url2.getParameter("absentKey"), equalTo("absentValue"));
}
}