UriComponentsBuilder parse of empty fragments

Check for an empty fragment in UriComponentsBuilder.fromUriString(...)
to prevent the invocation of fragment(...).

Previously, UriComponentsBuilder.fromUriString(...) threw an exception
in the case of an empty fragment being provided (e.g. /example#).

Issue: SPR-10363
This commit is contained in:
Oliver Gierke 2013-03-08 17:22:13 +01:00 committed by Phillip Webb
parent 8e4e0f3531
commit 3eb3610660
2 changed files with 14 additions and 3 deletions

View File

@ -48,6 +48,7 @@ import org.springframework.web.util.HierarchicalUriComponents.PathComponent;
* @author Arjen Poutsma
* @author Rossen Stoyanchev
* @author Phillip Webb
* @author Oliver Gierke
* @since 3.1
* @see #newInstance()
* @see #fromPath(String)
@ -204,7 +205,10 @@ public class UriComponentsBuilder {
builder.path(path);
builder.query(query);
}
builder.fragment(fragment);
if (StringUtils.hasText(fragment)) {
builder.fragment(fragment);
}
return builder;
}

View File

@ -23,16 +23,16 @@ import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
/**
* @author Arjen Poutsma
* @author Phillip Webb
* @author Oliver Gierke
*/
public class UriComponentsBuilderTests {
@ -354,4 +354,11 @@ public class UriComponentsBuilderTests {
assertThat(UriComponentsBuilder.fromUriString("http://example.com/abc/").path("/x/").path("/y/z").build().toString(), equalTo("http://example.com/abc/x/y/z"));
assertThat(UriComponentsBuilder.fromUriString("http://example.com/abc/").pathSegment("x").path("y").build().toString(), equalTo("http://example.com/abc/x/y"));
}
@Test
public void parsesEmptyFragment() {
UriComponents components = UriComponentsBuilder.fromUriString("/example#").build();
assertThat(components.getFragment(), is(nullValue()));
assertThat(components.toString(), equalTo("/example"));
}
}