提交 d96a7b4b 编写于 作者: J Juergen Hoeller

ClientRequest.attribute(name) defensively handles null value

Issue: SPR-17486
上级 b3aad549
......@@ -86,13 +86,7 @@ public interface ClientRequest {
* @return the attribute value
*/
default Optional<Object> attribute(String name) {
Map<String, Object> attributes = attributes();
if (attributes.containsKey(name)) {
return Optional.of(attributes.get(name));
}
else {
return Optional.empty();
}
return Optional.ofNullable(attributes().get(name));
}
/**
......
......@@ -62,7 +62,6 @@ public class DefaultWebClientTests {
@Test
public void basic() {
this.builder.build().get().uri("/path").exchange();
ClientRequest request = verifyAndGetRequest();
......@@ -73,7 +72,6 @@ public class DefaultWebClientTests {
@Test
public void uriBuilder() {
this.builder.build().get()
.uri(builder -> builder.path("/path").queryParam("q", "12").build())
.exchange();
......@@ -85,7 +83,6 @@ public class DefaultWebClientTests {
@Test
public void uriBuilderWithPathOverride() {
this.builder.build().get()
.uri(builder -> builder.replacePath("/path").build())
.exchange();
......@@ -97,7 +94,6 @@ public class DefaultWebClientTests {
@Test
public void requestHeaderAndCookie() {
this.builder.build().get().uri("/path").accept(MediaType.APPLICATION_JSON)
.cookies(cookies -> cookies.add("id", "123")) // SPR-16178
.exchange();
......@@ -110,7 +106,6 @@ public class DefaultWebClientTests {
@Test
public void defaultHeaderAndCookie() {
WebClient client = this.builder
.defaultHeader("Accept", "application/json").defaultCookie("id", "123")
.build();
......@@ -125,7 +120,6 @@ public class DefaultWebClientTests {
@Test
public void defaultHeaderAndCookieOverrides() {
WebClient client = this.builder
.defaultHeader("Accept", "application/json")
.defaultCookie("id", "123")
......@@ -141,7 +135,6 @@ public class DefaultWebClientTests {
@Test
public void defaultRequest() {
ThreadLocal<String> context = new NamedThreadLocal<>("foo");
Map<String, Object> actual = new HashMap<>();
......@@ -176,7 +169,6 @@ public class DefaultWebClientTests {
@Test
public void mutateDoesCopy() {
// First, build the clients
WebClient.Builder builder = WebClient.builder()
......@@ -216,8 +208,7 @@ public class DefaultWebClientTests {
}
@Test
public void attributes() {
public void withStringAttribute() {
Map<String, Object> actual = new HashMap<>();
ExchangeFilterFunction filter = (request, next) -> {
actual.putAll(request.attributes());
......@@ -230,11 +221,32 @@ public class DefaultWebClientTests {
.exchange();
assertEquals("bar", actual.get("foo"));
ClientRequest request = verifyAndGetRequest();
assertEquals("bar", request.attribute("foo").get());
}
@Test
public void apply() {
public void withNullAttribute() {
Map<String, Object> actual = new HashMap<>();
ExchangeFilterFunction filter = (request, next) -> {
actual.putAll(request.attributes());
return next.exchange(request);
};
this.builder.filter(filter).build()
.get().uri("/path")
.attribute("foo", null)
.exchange();
assertNull(actual.get("foo"));
ClientRequest request = verifyAndGetRequest();
assertFalse(request.attribute("foo").isPresent());
}
@Test
public void apply() {
WebClient client = this.builder
.apply(builder -> builder
.defaultHeader("Accept", "application/json")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册