diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index 961662aad25..9300d532760 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -414,7 +414,6 @@ public class HttpHeaders implements MultiValueMap, Serializable * Private constructor that can create read-only {@code HttpHeader} instances. */ private HttpHeaders(Map> headers, boolean readOnly) { - Assert.notNull(headers, "'headers' must not be null"); if (readOnly) { Map> map = new LinkedCaseInsensitiveMap<>(headers.size(), Locale.ENGLISH); headers.forEach((key, valueList) -> map.put(key, Collections.unmodifiableList(valueList))); @@ -1556,6 +1555,7 @@ public class HttpHeaders implements MultiValueMap, Serializable * Return a {@code HttpHeaders} object that can only be read, not written to. */ public static HttpHeaders readOnlyHttpHeaders(HttpHeaders headers) { + Assert.notNull(headers, "HttpHeaders must not be null"); return (headers.readOnly ? headers : new HttpHeaders(headers, true)); } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ClientRequest.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ClientRequest.java index 14901d541e1..50301b7710c 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ClientRequest.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ClientRequest.java @@ -114,7 +114,7 @@ public interface ClientRequest { /** * Create a builder with the given method and url. * @param method the HTTP method (GET, POST, etc) - * @param url the URL + * @param url the url (as a URI instance) * @return the created builder * @deprecated in favor of {@link #create(HttpMethod, URI)} */ @@ -126,7 +126,7 @@ public interface ClientRequest { /** * Create a request builder with the given method and url. * @param method the HTTP method (GET, POST, etc) - * @param url the URL + * @param url the url (as a URI instance) * @return the created builder */ static Builder create(HttpMethod method, URI url) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilder.java index bd3e6bd8e50..6dfbab0965f 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilder.java @@ -49,28 +49,30 @@ import org.springframework.web.reactive.function.BodyInserters; */ final class DefaultClientRequestBuilder implements ClientRequest.Builder { + private HttpMethod method; + + private URI url; + private final HttpHeaders headers = new HttpHeaders(); private final MultiValueMap cookies = new LinkedMultiValueMap<>(); private final Map attributes = new LinkedHashMap<>(); - private HttpMethod method; - - private URI url; - - private BodyInserter inserter = BodyInserters.empty(); + private BodyInserter body = BodyInserters.empty(); public DefaultClientRequestBuilder(HttpMethod method, URI url) { - method(method); - url(url); + Assert.notNull(method, "HttpMethod must not be null"); + Assert.notNull(url, "URI must not be null"); + this.method = method; + this.url = url; } public DefaultClientRequestBuilder(ClientRequest other) { Assert.notNull(other, "ClientRequest must not be null"); - method(other.method()); - url(other.url()); + this.method = other.method(); + this.url = other.url(); headers(headers -> headers.addAll(other.headers())); cookies(cookies -> cookies.addAll(other.cookies())); attributes(attributes -> attributes.putAll(other.attributes())); @@ -125,7 +127,7 @@ final class DefaultClientRequestBuilder implements ClientRequest.Builder { Assert.notNull(publisher, "'publisher' must not be null"); Assert.notNull(elementClass, "'elementClass' must not be null"); - this.inserter = BodyInserters.fromPublisher(publisher, elementClass); + this.body = BodyInserters.fromPublisher(publisher, elementClass); return this; } @@ -136,7 +138,7 @@ final class DefaultClientRequestBuilder implements ClientRequest.Builder { Assert.notNull(publisher, "'publisher' must not be null"); Assert.notNull(typeReference, "'typeReference' must not be null"); - this.inserter = BodyInserters.fromPublisher(publisher, typeReference); + this.body = BodyInserters.fromPublisher(publisher, typeReference); return this; } @@ -154,14 +156,13 @@ final class DefaultClientRequestBuilder implements ClientRequest.Builder { @Override public ClientRequest.Builder body(BodyInserter inserter) { - this.inserter = inserter; + this.body = inserter; return this; } @Override public ClientRequest build() { - return new BodyInserterRequest(this.method, this.url, this.headers, this.cookies, - this.inserter, this.attributes); + return new BodyInserterRequest(this.method, this.url, this.headers, this.cookies, this.body, this.attributes); } @@ -175,20 +176,19 @@ final class DefaultClientRequestBuilder implements ClientRequest.Builder { private final MultiValueMap cookies; - private final BodyInserter inserter; + private final BodyInserter body; private final Map attributes; public BodyInserterRequest(HttpMethod method, URI url, HttpHeaders headers, - MultiValueMap cookies, - BodyInserter inserter, + MultiValueMap cookies, BodyInserter body, Map attributes) { this.method = method; this.url = url; this.headers = HttpHeaders.readOnlyHttpHeaders(headers); this.cookies = CollectionUtils.unmodifiableMultiValueMap(cookies); - this.inserter = inserter; + this.body = body; this.attributes = Collections.unmodifiableMap(attributes); } @@ -214,7 +214,7 @@ final class DefaultClientRequestBuilder implements ClientRequest.Builder { @Override public BodyInserter body() { - return this.inserter; + return this.body; } @Override @@ -240,17 +240,15 @@ final class DefaultClientRequestBuilder implements ClientRequest.Builder { })); } - return this.inserter.insert(request, new BodyInserter.Context() { + return this.body.insert(request, new BodyInserter.Context() { @Override public List> messageWriters() { return strategies.messageWriters(); } - @Override public Optional serverRequest() { return Optional.empty(); } - @Override public Map hints() { return Collections.emptyMap(); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java index 5e5a2451316..1320c20d32d 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java @@ -42,16 +42,16 @@ import org.springframework.util.MultiValueMap; */ final class DefaultClientResponseBuilder implements ClientResponse.Builder { + private ExchangeStrategies strategies; + + private HttpStatus statusCode = HttpStatus.OK; + private final HttpHeaders headers = new HttpHeaders(); private final MultiValueMap cookies = new LinkedMultiValueMap<>(); - private HttpStatus statusCode = HttpStatus.OK; - private Flux body = Flux.empty(); - private ExchangeStrategies strategies; - public DefaultClientResponseBuilder(ExchangeStrategies strategies) { Assert.notNull(strategies, "ExchangeStrategies must not be null"); @@ -84,7 +84,6 @@ final class DefaultClientResponseBuilder implements ClientResponse.Builder { @Override public ClientResponse.Builder headers(Consumer headersConsumer) { - Assert.notNull(headersConsumer, "Consumer must not be null"); headersConsumer.accept(this.headers); return this; } @@ -99,7 +98,6 @@ final class DefaultClientResponseBuilder implements ClientResponse.Builder { @Override public ClientResponse.Builder cookies(Consumer> cookiesConsumer) { - Assert.notNull(cookiesConsumer, "Consumer must not be null"); cookiesConsumer.accept(this.cookies); return this; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java index 29f3e8a4d0c..465c143ca61 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java @@ -63,13 +63,14 @@ final class DefaultWebClientBuilder implements WebClient.Builder { @Nullable private ClientHttpConnector connector; - private ExchangeStrategies exchangeStrategies = ExchangeStrategies.withDefaults(); - @Nullable private ExchangeFunction exchangeFunction; + private ExchangeStrategies exchangeStrategies; + public DefaultWebClientBuilder() { + this.exchangeStrategies = ExchangeStrategies.withDefaults(); } public DefaultWebClientBuilder(DefaultWebClientBuilder other) { @@ -90,8 +91,8 @@ final class DefaultWebClientBuilder implements WebClient.Builder { new LinkedMultiValueMap<>(other.defaultCookies) : null); this.filters = (other.filters != null ? new ArrayList<>(other.filters) : null); this.connector = other.connector; - this.exchangeStrategies = other.exchangeStrategies; this.exchangeFunction = other.exchangeFunction; + this.exchangeStrategies = other.exchangeStrategies; } @@ -181,15 +182,15 @@ final class DefaultWebClientBuilder implements WebClient.Builder { } @Override - public WebClient.Builder exchangeStrategies(ExchangeStrategies strategies) { - Assert.notNull(strategies, "ExchangeStrategies must not be null"); - this.exchangeStrategies = strategies; + public WebClient.Builder exchangeFunction(ExchangeFunction exchangeFunction) { + this.exchangeFunction = exchangeFunction; return this; } @Override - public WebClient.Builder exchangeFunction(ExchangeFunction exchangeFunction) { - this.exchangeFunction = exchangeFunction; + public WebClient.Builder exchangeStrategies(ExchangeStrategies strategies) { + Assert.notNull(strategies, "ExchangeStrategies must not be null"); + this.exchangeStrategies = strategies; return this; } @@ -207,9 +208,7 @@ final class DefaultWebClientBuilder implements WebClient.Builder { private static @Nullable HttpHeaders unmodifiableCopy(@Nullable HttpHeaders original) { if (original != null) { - HttpHeaders copy = new HttpHeaders(); - copy.putAll(original); - return HttpHeaders.readOnlyHttpHeaders(copy); + return HttpHeaders.readOnlyHttpHeaders(original); } else { return null; @@ -243,7 +242,6 @@ final class DefaultWebClientBuilder implements WebClient.Builder { else if (this.connector != null) { return ExchangeFunctions.create(this.connector, this.exchangeStrategies); } - else { return ExchangeFunctions.create(new ReactorClientHttpConnector(), this.exchangeStrategies); } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ExchangeStrategies.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ExchangeStrategies.java index d0eaef55bfe..aa25c00ec09 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ExchangeStrategies.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ExchangeStrategies.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -35,8 +35,6 @@ import org.springframework.http.codec.HttpMessageWriter; */ public interface ExchangeStrategies { - // Instance methods - /** * Return the {@link HttpMessageReader}s to be used for request body conversion. * @return the stream of message readers @@ -60,8 +58,6 @@ public interface ExchangeStrategies { return builder().build(); } - // Builder methods - /** * Return a mutable builder for a {@code ExchangeStrategies} with default initialization. * @return the builder diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java index 55b2a475013..20581377ffc 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -285,15 +285,6 @@ public interface WebClient { */ Builder filters(Consumer> filtersConsumer); - /** - * Configure the {@link ExchangeStrategies} to use. - *

By default {@link ExchangeStrategies#withDefaults()} is used. - * @param strategies the strategies to use - * @see #clientConnector(ClientHttpConnector) - * @see #exchangeFunction(ExchangeFunction) - */ - Builder exchangeStrategies(ExchangeStrategies strategies); - /** * Provide a pre-configured {@link ExchangeFunction} instance. This is * an alternative to and effectively overrides the following: @@ -307,6 +298,15 @@ public interface WebClient { */ Builder exchangeFunction(ExchangeFunction exchangeFunction); + /** + * Configure the {@link ExchangeStrategies} to use. + *

By default {@link ExchangeStrategies#withDefaults()} is used. + * @param strategies the strategies to use + * @see #clientConnector(ClientHttpConnector) + * @see #exchangeFunction(ExchangeFunction) + */ + Builder exchangeStrategies(ExchangeStrategies strategies); + /** * Clone this {@code WebClient.Builder} */ diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java index cc930304a66..2ac629d1190 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java @@ -96,7 +96,6 @@ class DefaultEntityResponseBuilder implements EntityResponse.Builder { @Override public EntityResponse.Builder cookies(Consumer> cookiesConsumer) { - Assert.notNull(cookiesConsumer, "Consumer must not be null"); cookiesConsumer.accept(this.cookies); return this; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java index 1127a614d0c..d743689bbb9 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java @@ -99,7 +99,6 @@ final class DefaultRenderingResponseBuilder implements RenderingResponse.Builder @Override public RenderingResponse.Builder cookies(Consumer> cookiesConsumer) { - Assert.notNull(cookiesConsumer, "Consumer must not be null"); cookiesConsumer.accept(this.cookies); return this; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequest.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequest.java index 56534d52163..ee680b04a6c 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequest.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequest.java @@ -76,14 +76,10 @@ class DefaultServerRequest implements ServerRequest { DefaultServerRequest(ServerWebExchange exchange, List> messageReaders) { this.exchange = exchange; - this.messageReaders = unmodifiableCopy(messageReaders); + this.messageReaders = Collections.unmodifiableList(new ArrayList<>(messageReaders)); this.headers = new DefaultHeaders(); } - private static List unmodifiableCopy(List list) { - return Collections.unmodifiableList(new ArrayList<>(list)); - } - @Override public String methodName() { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java index 8dbf77609a8..6de384821b5 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java @@ -97,7 +97,6 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { @Override public ServerResponse.BodyBuilder headers(Consumer headersConsumer) { - Assert.notNull(headersConsumer, "Consumer must not be null"); headersConsumer.accept(this.headers); return this; } @@ -111,7 +110,6 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { @Override public ServerResponse.BodyBuilder cookies(Consumer> cookiesConsumer) { - Assert.notNull(cookiesConsumer, "Consumer must not be null"); cookiesConsumer.accept(this.cookies); return this; } @@ -201,9 +199,8 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { public Mono build( BiFunction> writeFunction) { - Assert.notNull(writeFunction, "BiFunction must not be null"); return Mono.just( - new WriterFunctionServerResponse(this.statusCode, this.headers, this.cookies, writeFunction)); + new WriterFunctionResponse(this.statusCode, this.headers, this.cookies, writeFunction)); } @Override @@ -250,15 +247,12 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { @Override public Mono body(BodyInserter inserter) { - Assert.notNull(inserter, "BodyInserter must not be null"); return Mono.just( - new BodyInserterServerResponse<>(this.statusCode, this.headers, this.cookies, inserter, this.hints)); + new BodyInserterResponse<>(this.statusCode, this.headers, this.cookies, inserter, this.hints)); } @Override public Mono render(String name, Object... modelAttributes) { - Assert.hasLength(name, "Name must not be empty"); - return new DefaultRenderingResponseBuilder(name) .headers(this.headers) .status(this.statusCode) @@ -269,8 +263,6 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { @Override public Mono render(String name, Map model) { - Assert.hasLength(name, "Name must not be empty"); - return new DefaultRenderingResponseBuilder(name) .headers(this.headers) .status(this.statusCode) @@ -290,24 +282,12 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { private final MultiValueMap cookies; - protected AbstractServerResponse(int statusCode, HttpHeaders headers, - MultiValueMap cookies) { + protected AbstractServerResponse( + int statusCode, HttpHeaders headers, MultiValueMap cookies) { this.statusCode = statusCode; - this.headers = readOnlyCopy(headers); - this.cookies = readOnlyCopy(cookies); - } - - private static HttpHeaders readOnlyCopy(HttpHeaders headers) { - HttpHeaders copy = new HttpHeaders(); - copy.putAll(headers); - return HttpHeaders.readOnlyHttpHeaders(copy); - } - - private static MultiValueMap readOnlyCopy(MultiValueMap map) { - MultiValueMap copy = new LinkedMultiValueMap<>(); - copy.putAll(map); - return CollectionUtils.unmodifiableMultiValueMap(copy); + this.headers = HttpHeaders.readOnlyHttpHeaders(headers); + this.cookies = CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap<>(cookies)); } @Override @@ -367,15 +347,16 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { } - private static final class WriterFunctionServerResponse extends AbstractServerResponse { + private static final class WriterFunctionResponse extends AbstractServerResponse { private final BiFunction> writeFunction; - public WriterFunctionServerResponse(int statusCode, HttpHeaders headers, + public WriterFunctionResponse(int statusCode, HttpHeaders headers, MultiValueMap cookies, BiFunction> writeFunction) { super(statusCode, headers, cookies); + Assert.notNull(writeFunction, "BiFunction must not be null"); this.writeFunction = writeFunction; } @@ -386,18 +367,19 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { } - private static final class BodyInserterServerResponse extends AbstractServerResponse { + private static final class BodyInserterResponse extends AbstractServerResponse { private final BodyInserter inserter; private final Map hints; - public BodyInserterServerResponse(int statusCode, HttpHeaders headers, + public BodyInserterResponse(int statusCode, HttpHeaders headers, MultiValueMap cookies, - BodyInserter inserter, Map hints) { + BodyInserter body, Map hints) { super(statusCode, headers, cookies); - this.inserter = inserter; + Assert.notNull(body, "BodyInserter must not be null"); + this.inserter = body; this.hints = hints; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerStrategies.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerStrategies.java index dced104848f..5ae7a8c22b0 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerStrategies.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerStrategies.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -41,8 +41,6 @@ import org.springframework.web.server.i18n.LocaleContextResolver; */ public interface HandlerStrategies { - // Instance methods - /** * Return the {@link HttpMessageReader}s to be used for request body conversion. * @return the message readers @@ -90,8 +88,6 @@ public interface HandlerStrategies { return builder().build(); } - // Builder methods - /** * Return a mutable builder for a {@code HandlerStrategies} with default initialization. * @return the builder diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java index 5eea3dff9ca..7273f5bb53a 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java @@ -248,7 +248,6 @@ public interface ServerRequest { /** * Return the form data from the body of the request if the Content-Type is * {@code "application/x-www-form-urlencoded"} or an empty map otherwise. - * *

Note: calling this method causes the request body to * be read and parsed in full and the resulting {@code MultiValueMap} is * cached so that this method is safe to call more than once. @@ -258,7 +257,6 @@ public interface ServerRequest { /** * Return the parts of a multipart request if the Content-Type is * {@code "multipart/form-data"} or an empty map otherwise. - * *

Note: calling this method causes the request body to * be read and parsed in full and the resulting {@code MultiValueMap} is * cached so that this method is safe to call more than once. @@ -266,6 +264,7 @@ public interface ServerRequest { Mono> multipartData(); + // Static methods /** * Create a new {@code ServerRequest} based on the given {@code ServerWebExchange} and diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java index 2ed5430b040..6c17558c23d 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java @@ -56,8 +56,6 @@ import org.springframework.web.server.ServerWebExchange; */ public interface ServerResponse { - // Instance methods - /** * Return the status code of this response. */ @@ -82,7 +80,7 @@ public interface ServerResponse { Mono writeTo(ServerWebExchange exchange, Context context); - // Static builder methods + // Static methods /** * Create a builder with the status code and headers of the given response. @@ -190,7 +188,6 @@ public interface ServerResponse { /** * Create a builder with a {@linkplain HttpStatus#NOT_FOUND 404 Not Found} status. - * * @return the created builder */ static HeadersBuilder notFound() {