ClientRequest.attribute(name) defensively handles null value
Issue: SPR-17486
This commit is contained in:
parent
b3aad549c9
commit
d96a7b4bfc
|
@ -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 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")
|
||||
|
|
Loading…
Reference in New Issue