From 9918abfa99efca6c1ad5e5c9feafb6837d702155 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Tue, 5 Aug 2025 10:03:40 +0200 Subject: [PATCH] Add nullability annotations to module/spring-boot-restclient See gh-46587 --- .../boot/restclient/BasicAuthentication.java | 6 ++-- .../boot/restclient/RestTemplateBuilder.java | 36 ++++++++++--------- ...teBuilderClientHttpRequestInitializer.java | 6 ++-- .../restclient/RootUriTemplateHandler.java | 8 +++-- .../AbstractRestClientProperties.java | 8 +++-- ...MessageConvertersRestClientCustomizer.java | 6 ++-- .../PropertiesRestClientCustomizer.java | 23 +++++++----- .../RestClientBuilderConfigurer.java | 6 ++-- .../RestTemplateBuilderConfigurer.java | 25 +++++++------ .../autoconfigure/package-info.java | 3 ++ .../HttpServiceClientAutoConfiguration.java | 1 + ...tPropertiesHttpServiceGroupConfigurer.java | 14 ++++---- .../autoconfigure/service/package-info.java | 3 ++ .../restclient/observation/package-info.java | 3 ++ .../boot/restclient/package-info.java | 3 ++ 15 files changed, 96 insertions(+), 55 deletions(-) diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/BasicAuthentication.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/BasicAuthentication.java index 0c5eebeeb54..91ed5fc6cc2 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/BasicAuthentication.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/BasicAuthentication.java @@ -18,6 +18,8 @@ package org.springframework.boot.restclient; import java.nio.charset.Charset; +import org.jspecify.annotations.Nullable; + import org.springframework.http.HttpHeaders; import org.springframework.util.Assert; @@ -33,9 +35,9 @@ class BasicAuthentication { private final String password; - private final Charset charset; + private final @Nullable Charset charset; - BasicAuthentication(String username, String password, Charset charset) { + BasicAuthentication(String username, String password, @Nullable Charset charset) { Assert.notNull(username, "'username' must not be null"); Assert.notNull(password, "'password' must not be null"); this.username = username; diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RestTemplateBuilder.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RestTemplateBuilder.java index 2ecbbe1c30e..7199d1058b3 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RestTemplateBuilder.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RestTemplateBuilder.java @@ -30,6 +30,8 @@ import java.util.Set; import java.util.function.Supplier; import java.util.function.UnaryOperator; +import org.jspecify.annotations.Nullable; + import org.springframework.beans.BeanUtils; import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; @@ -74,19 +76,19 @@ public class RestTemplateBuilder { private final boolean detectRequestFactory; - private final String rootUri; + private final @Nullable String rootUri; - private final Set> messageConverters; + private final @Nullable Set> messageConverters; private final Set interceptors; - private final ClientHttpRequestFactoryBuilder requestFactoryBuilder; + private final @Nullable ClientHttpRequestFactoryBuilder requestFactoryBuilder; - private final UriTemplateHandler uriTemplateHandler; + private final @Nullable UriTemplateHandler uriTemplateHandler; - private final ResponseErrorHandler errorHandler; + private final @Nullable ResponseErrorHandler errorHandler; - private final BasicAuthentication basicAuthentication; + private final @Nullable BasicAuthentication basicAuthentication; private final Map> defaultHeaders; @@ -116,10 +118,11 @@ public class RestTemplateBuilder { } private RestTemplateBuilder(ClientHttpRequestFactorySettings requestFactorySettings, boolean detectRequestFactory, - String rootUri, Set> messageConverters, - Set interceptors, ClientHttpRequestFactoryBuilder requestFactoryBuilder, - UriTemplateHandler uriTemplateHandler, ResponseErrorHandler errorHandler, - BasicAuthentication basicAuthentication, Map> defaultHeaders, + @Nullable String rootUri, @Nullable Set> messageConverters, + Set interceptors, + @Nullable ClientHttpRequestFactoryBuilder requestFactoryBuilder, + @Nullable UriTemplateHandler uriTemplateHandler, @Nullable ResponseErrorHandler errorHandler, + @Nullable BasicAuthentication basicAuthentication, Map> defaultHeaders, Set customizers, Set> requestCustomizers) { this.requestFactorySettings = requestFactorySettings; this.detectRequestFactory = detectRequestFactory; @@ -156,7 +159,7 @@ public class RestTemplateBuilder { * @param rootUri the root URI or {@code null} * @return a new builder instance */ - public RestTemplateBuilder rootUri(String rootUri) { + public RestTemplateBuilder rootUri(@Nullable String rootUri) { return new RestTemplateBuilder(this.requestFactorySettings, this.detectRequestFactory, rootUri, this.messageConverters, this.interceptors, this.requestFactoryBuilder, this.uriTemplateHandler, this.errorHandler, this.basicAuthentication, this.defaultHeaders, this.customizers, @@ -390,7 +393,7 @@ public class RestTemplateBuilder { * @return a new builder instance * @since 2.2.0 */ - public RestTemplateBuilder basicAuthentication(String username, String password, Charset charset) { + public RestTemplateBuilder basicAuthentication(String username, String password, @Nullable Charset charset) { return new RestTemplateBuilder(this.requestFactorySettings, this.detectRequestFactory, this.rootUri, this.messageConverters, this.interceptors, this.requestFactoryBuilder, this.uriTemplateHandler, this.errorHandler, new BasicAuthentication(username, password, charset), this.defaultHeaders, @@ -688,7 +691,7 @@ public class RestTemplateBuilder { * @return a {@link ClientHttpRequestFactory} or {@code null} * @since 2.2.0 */ - public ClientHttpRequestFactory buildRequestFactory() { + public @Nullable ClientHttpRequestFactory buildRequestFactory() { ClientHttpRequestFactoryBuilder requestFactoryBuilder = requestFactoryBuilder(); return (requestFactoryBuilder != null) ? requestFactoryBuilder.build(this.requestFactorySettings) : null; } @@ -699,7 +702,7 @@ public class RestTemplateBuilder { * @return a {@link ClientHttpRequestFactoryBuilder} or {@code null} * @since 3.5.0 */ - public ClientHttpRequestFactoryBuilder requestFactoryBuilder() { + public @Nullable ClientHttpRequestFactoryBuilder requestFactoryBuilder() { if (this.requestFactoryBuilder != null) { return this.requestFactoryBuilder; } @@ -731,7 +734,8 @@ public class RestTemplateBuilder { return Collections.unmodifiableList(Arrays.asList(Arrays.copyOf(items, items.length))); } - private static Set append(Collection collection, Collection additions) { + private static Set append(@Nullable Collection collection, + @Nullable Collection additions) { Set result = new LinkedHashSet<>((collection != null) ? collection : Collections.emptySet()); if (additions != null) { result.addAll(additions); @@ -739,7 +743,7 @@ public class RestTemplateBuilder { return Collections.unmodifiableSet(result); } - private static Map> append(Map> map, K key, V[] values) { + private static Map> append(@Nullable Map> map, K key, V @Nullable [] values) { Map> result = new LinkedHashMap<>((map != null) ? map : Collections.emptyMap()); if (values != null) { result.put(key, copiedListOf(values)); diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RestTemplateBuilderClientHttpRequestInitializer.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RestTemplateBuilderClientHttpRequestInitializer.java index 5803238fcb8..1aad218d55e 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RestTemplateBuilderClientHttpRequestInitializer.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RestTemplateBuilderClientHttpRequestInitializer.java @@ -20,6 +20,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.util.LambdaSafe; import org.springframework.http.HttpHeaders; import org.springframework.http.client.ClientHttpRequest; @@ -34,13 +36,13 @@ import org.springframework.http.client.ClientHttpRequestInitializer; */ class RestTemplateBuilderClientHttpRequestInitializer implements ClientHttpRequestInitializer { - private final BasicAuthentication basicAuthentication; + private final @Nullable BasicAuthentication basicAuthentication; private final Map> defaultHeaders; private final Set> requestCustomizers; - RestTemplateBuilderClientHttpRequestInitializer(BasicAuthentication basicAuthentication, + RestTemplateBuilderClientHttpRequestInitializer(@Nullable BasicAuthentication basicAuthentication, Map> defaultHeaders, Set> requestCustomizers) { this.basicAuthentication = basicAuthentication; this.defaultHeaders = defaultHeaders; diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RootUriTemplateHandler.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RootUriTemplateHandler.java index 4a7d9d958d2..6d710cf2268 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RootUriTemplateHandler.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/RootUriTemplateHandler.java @@ -19,6 +19,8 @@ package org.springframework.boot.restclient; import java.net.URI; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; import org.springframework.web.util.UriTemplateHandler; @@ -32,7 +34,7 @@ import org.springframework.web.util.UriTemplateHandler; */ public class RootUriTemplateHandler implements UriTemplateHandler { - private final String rootUri; + private final @Nullable String rootUri; private final UriTemplateHandler handler; @@ -55,7 +57,7 @@ public class RootUriTemplateHandler implements UriTemplateHandler { } @Override - public URI expand(String uriTemplate, Object... uriVariables) { + public URI expand(String uriTemplate, @Nullable Object... uriVariables) { return this.handler.expand(apply(uriTemplate), uriVariables); } @@ -66,7 +68,7 @@ public class RootUriTemplateHandler implements UriTemplateHandler { return uriTemplate; } - public String getRootUri() { + public @Nullable String getRootUri() { return this.rootUri; } diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/AbstractRestClientProperties.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/AbstractRestClientProperties.java index 60fb70651e3..590aa14ecd3 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/AbstractRestClientProperties.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/AbstractRestClientProperties.java @@ -20,6 +20,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.http.client.autoconfigure.AbstractHttpRequestFactoryProperties; import org.springframework.boot.http.client.autoconfigure.ApiversionProperties; @@ -40,7 +42,7 @@ public abstract class AbstractRestClientProperties extends AbstractHttpRequestFa * Base url to set in the underlying HTTP client group. By default, set to * {@code null}. */ - private String baseUrl; + private @Nullable String baseUrl; /** * Default request headers for interface client group. By default, set to empty @@ -54,11 +56,11 @@ public abstract class AbstractRestClientProperties extends AbstractHttpRequestFa @NestedConfigurationProperty private final ApiversionProperties apiversion = new ApiversionProperties(); - public String getBaseUrl() { + public @Nullable String getBaseUrl() { return this.baseUrl; } - public void setBaseUrl(String baseUrl) { + public void setBaseUrl(@Nullable String baseUrl) { this.baseUrl = baseUrl; } diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/HttpMessageConvertersRestClientCustomizer.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/HttpMessageConvertersRestClientCustomizer.java index cea412ac1f2..ab09cb9f3b6 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/HttpMessageConvertersRestClientCustomizer.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/HttpMessageConvertersRestClientCustomizer.java @@ -19,6 +19,8 @@ package org.springframework.boot.restclient.autoconfigure; import java.util.Arrays; import java.util.List; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.http.converter.autoconfigure.HttpMessageConverters; import org.springframework.boot.restclient.RestClientCustomizer; import org.springframework.http.converter.HttpMessageConverter; @@ -34,14 +36,14 @@ import org.springframework.web.client.RestClient; */ public class HttpMessageConvertersRestClientCustomizer implements RestClientCustomizer { - private final Iterable> messageConverters; + private final @Nullable Iterable> messageConverters; public HttpMessageConvertersRestClientCustomizer(HttpMessageConverter... messageConverters) { Assert.notNull(messageConverters, "'messageConverters' must not be null"); this.messageConverters = Arrays.asList(messageConverters); } - HttpMessageConvertersRestClientCustomizer(HttpMessageConverters messageConverters) { + HttpMessageConvertersRestClientCustomizer(@Nullable HttpMessageConverters messageConverters) { this.messageConverters = messageConverters; } diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/PropertiesRestClientCustomizer.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/PropertiesRestClientCustomizer.java index 8aed9fc48c6..cf4224cdc93 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/PropertiesRestClientCustomizer.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/PropertiesRestClientCustomizer.java @@ -21,6 +21,8 @@ import java.util.List; import java.util.Map; import java.util.function.Consumer; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.context.properties.PropertyMapper; import org.springframework.boot.http.client.autoconfigure.ApiversionProperties; import org.springframework.boot.http.client.autoconfigure.PropertiesApiVersionInserter; @@ -29,6 +31,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.web.client.ApiVersionFormatter; import org.springframework.web.client.ApiVersionInserter; import org.springframework.web.client.RestClient; +import org.springframework.web.client.RestClient.Builder; /** * {@link RestClientCustomizer} to apply {@link AbstractRestClientProperties}. @@ -38,18 +41,19 @@ import org.springframework.web.client.RestClient; */ public class PropertiesRestClientCustomizer implements RestClientCustomizer { - private final AbstractRestClientProperties[] orderedProperties; + private final @Nullable AbstractRestClientProperties[] orderedProperties; - private ApiVersionInserter apiVersionInserter; + private final @Nullable ApiVersionInserter apiVersionInserter; - public PropertiesRestClientCustomizer(ApiVersionInserter apiVersionInserter, - ApiVersionFormatter apiVersionFormatter, AbstractRestClientProperties... orderedProperties) { + public PropertiesRestClientCustomizer(@Nullable ApiVersionInserter apiVersionInserter, + @Nullable ApiVersionFormatter apiVersionFormatter, + @Nullable AbstractRestClientProperties... orderedProperties) { this.orderedProperties = orderedProperties; this.apiVersionInserter = PropertiesApiVersionInserter.get(apiVersionInserter, apiVersionFormatter, Arrays.stream(orderedProperties).map(this::getApiVersion)); } - private ApiversionProperties getApiVersion(AbstractRestClientProperties properties) { + private @Nullable ApiversionProperties getApiVersion(@Nullable AbstractRestClientProperties properties) { return (properties != null) ? properties.getApiversion() : null; } @@ -62,13 +66,16 @@ public class PropertiesRestClientCustomizer implements RestClientCustomizer { if (properties != null) { map.from(properties::getBaseUrl).whenHasText().to(builder::baseUrl); map.from(properties::getDefaultHeader).as(this::putAllHeaders).to(builder::defaultHeaders); - map.from(properties.getApiversion()) - .as(ApiversionProperties::getDefaultVersion) - .to(builder::defaultApiVersion); + setDefaultApiVersion(builder, map, properties); } } } + @SuppressWarnings("NullAway") // Lambda isn't detected with the correct nullability + private void setDefaultApiVersion(Builder builder, PropertyMapper map, AbstractRestClientProperties properties) { + map.from(properties.getApiversion()).as(ApiversionProperties::getDefaultVersion).to(builder::defaultApiVersion); + } + private Consumer putAllHeaders(Map> defaultHeaders) { return (httpHeaders) -> httpHeaders.putAll(defaultHeaders); } diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/RestClientBuilderConfigurer.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/RestClientBuilderConfigurer.java index 1b609d5ba08..f91de332cf8 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/RestClientBuilderConfigurer.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/RestClientBuilderConfigurer.java @@ -19,6 +19,8 @@ package org.springframework.boot.restclient.autoconfigure; import java.util.Collections; import java.util.List; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; import org.springframework.boot.restclient.RestClientCustomizer; @@ -43,7 +45,7 @@ public class RestClientBuilderConfigurer { private final List customizers; - private final PropertiesRestClientCustomizer propertiesCustomizer; + private final @Nullable PropertiesRestClientCustomizer propertiesCustomizer; public RestClientBuilderConfigurer() { this(ClientHttpRequestFactoryBuilder.detect(), ClientHttpRequestFactorySettings.defaults(), null, @@ -52,7 +54,7 @@ public class RestClientBuilderConfigurer { RestClientBuilderConfigurer(ClientHttpRequestFactoryBuilder requestFactoryBuilder, ClientHttpRequestFactorySettings requestFactorySettings, - PropertiesRestClientCustomizer propertiesCustomizer, List customizers) { + @Nullable PropertiesRestClientCustomizer propertiesCustomizer, List customizers) { this.requestFactoryBuilder = requestFactoryBuilder; this.requestFactorySettings = requestFactorySettings; this.propertiesCustomizer = propertiesCustomizer; diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/RestTemplateBuilderConfigurer.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/RestTemplateBuilderConfigurer.java index 70b1126f0aa..fd77def8cdf 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/RestTemplateBuilderConfigurer.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/RestTemplateBuilderConfigurer.java @@ -20,6 +20,8 @@ import java.util.Collection; import java.util.List; import java.util.function.BiFunction; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; import org.springframework.boot.http.converter.autoconfigure.HttpMessageConverters; @@ -40,33 +42,34 @@ import org.springframework.util.ObjectUtils; */ public final class RestTemplateBuilderConfigurer { - private ClientHttpRequestFactoryBuilder requestFactoryBuilder; + private @Nullable ClientHttpRequestFactoryBuilder requestFactoryBuilder; - private ClientHttpRequestFactorySettings requestFactorySettings; + private @Nullable ClientHttpRequestFactorySettings requestFactorySettings; - private HttpMessageConverters httpMessageConverters; + private @Nullable HttpMessageConverters httpMessageConverters; - private List restTemplateCustomizers; + private @Nullable List restTemplateCustomizers; - private List> restTemplateRequestCustomizers; + private @Nullable List> restTemplateRequestCustomizers; - void setRequestFactoryBuilder(ClientHttpRequestFactoryBuilder requestFactoryBuilder) { + void setRequestFactoryBuilder(@Nullable ClientHttpRequestFactoryBuilder requestFactoryBuilder) { this.requestFactoryBuilder = requestFactoryBuilder; } - void setRequestFactorySettings(ClientHttpRequestFactorySettings requestFactorySettings) { + void setRequestFactorySettings(@Nullable ClientHttpRequestFactorySettings requestFactorySettings) { this.requestFactorySettings = requestFactorySettings; } - void setHttpMessageConverters(HttpMessageConverters httpMessageConverters) { + void setHttpMessageConverters(@Nullable HttpMessageConverters httpMessageConverters) { this.httpMessageConverters = httpMessageConverters; } - void setRestTemplateCustomizers(List restTemplateCustomizers) { + void setRestTemplateCustomizers(@Nullable List restTemplateCustomizers) { this.restTemplateCustomizers = restTemplateCustomizers; } - void setRestTemplateRequestCustomizers(List> restTemplateRequestCustomizers) { + void setRestTemplateRequestCustomizers( + @Nullable List> restTemplateRequestCustomizers) { this.restTemplateRequestCustomizers = restTemplateRequestCustomizers; } @@ -91,7 +94,7 @@ public final class RestTemplateBuilderConfigurer { return builder; } - private RestTemplateBuilder addCustomizers(RestTemplateBuilder builder, List customizers, + private RestTemplateBuilder addCustomizers(RestTemplateBuilder builder, @Nullable List customizers, BiFunction, RestTemplateBuilder> method) { if (!ObjectUtils.isEmpty(customizers)) { return method.apply(builder, customizers); diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/package-info.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/package-info.java index 0a7984ff8c1..df2c8997689 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/package-info.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/package-info.java @@ -17,4 +17,7 @@ /** * Auto-configuration for RestClient and RestTemplate. */ +@NullMarked package org.springframework.boot.restclient.autoconfigure; + +import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/HttpServiceClientAutoConfiguration.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/HttpServiceClientAutoConfiguration.java index d6a59819fb1..000b0d415a3 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/HttpServiceClientAutoConfiguration.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/HttpServiceClientAutoConfiguration.java @@ -55,6 +55,7 @@ import org.springframework.web.service.registry.ImportHttpServices; @EnableConfigurationProperties(HttpClientServiceProperties.class) public final class HttpServiceClientAutoConfiguration implements BeanClassLoaderAware { + @SuppressWarnings("NullAway.Init") private ClassLoader beanClassLoader; HttpServiceClientAutoConfiguration() { diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/RestClientPropertiesHttpServiceGroupConfigurer.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/RestClientPropertiesHttpServiceGroupConfigurer.java index 1d33de58adb..0af323a460b 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/RestClientPropertiesHttpServiceGroupConfigurer.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/RestClientPropertiesHttpServiceGroupConfigurer.java @@ -16,6 +16,8 @@ package org.springframework.boot.restclient.autoconfigure.service; +import org.jspecify.annotations.Nullable; + import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; @@ -44,7 +46,7 @@ class RestClientPropertiesHttpServiceGroupConfigurer implements RestClientHttpSe private final ObjectProvider sslBundles; - private final HttpClientProperties clientProperties; + private final @Nullable HttpClientProperties clientProperties; private final HttpClientServiceProperties serviceProperties; @@ -52,12 +54,12 @@ class RestClientPropertiesHttpServiceGroupConfigurer implements RestClientHttpSe private final ObjectProvider requestFactorySettings; - private final ApiVersionInserter apiVersionInserter; + private final @Nullable ApiVersionInserter apiVersionInserter; - private final ApiVersionFormatter apiVersionFormatter; + private final @Nullable ApiVersionFormatter apiVersionFormatter; RestClientPropertiesHttpServiceGroupConfigurer(ClassLoader classLoader, ObjectProvider sslBundles, - HttpClientProperties clientProperties, HttpClientServiceProperties serviceProperties, + @Nullable HttpClientProperties clientProperties, HttpClientServiceProperties serviceProperties, ObjectProvider> requestFactoryBuilder, ObjectProvider requestFactorySettings, ObjectProvider apiVersionInserter, @@ -89,12 +91,12 @@ class RestClientPropertiesHttpServiceGroupConfigurer implements RestClientHttpSe } private PropertiesRestClientCustomizer getPropertiesRestClientCustomizer( - HttpClientServiceProperties.Group groupProperties) { + HttpClientServiceProperties.@Nullable Group groupProperties) { return new PropertiesRestClientCustomizer(this.apiVersionInserter, this.apiVersionFormatter, groupProperties, this.serviceProperties); } - private ClientHttpRequestFactory getRequestFactory(HttpClientServiceProperties.Group groupProperties) { + private ClientHttpRequestFactory getRequestFactory(HttpClientServiceProperties.@Nullable Group groupProperties) { ClientHttpRequestFactories factories = new ClientHttpRequestFactories(this.sslBundles, groupProperties, this.serviceProperties, this.clientProperties); ClientHttpRequestFactoryBuilder builder = this.requestFactoryBuilder diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/package-info.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/package-info.java index d47a4d159d0..cafe9c83d3f 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/package-info.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/autoconfigure/service/package-info.java @@ -17,4 +17,7 @@ /** * Auto-Configuration for Spring's Blocking HTTP Service Interface Clients. */ +@NullMarked package org.springframework.boot.restclient.autoconfigure.service; + +import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/observation/package-info.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/observation/package-info.java index b0536203954..4f29a801eaf 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/observation/package-info.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/observation/package-info.java @@ -17,4 +17,7 @@ /** * Observation integration for RestClient and RestTemplate. */ +@NullMarked package org.springframework.boot.restclient.observation; + +import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/package-info.java b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/package-info.java index feecadcbc27..fef1594d4cf 100644 --- a/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/package-info.java +++ b/module/spring-boot-restclient/src/main/java/org/springframework/boot/restclient/package-info.java @@ -17,4 +17,7 @@ /** * Web client utilities. */ +@NullMarked package org.springframework.boot.restclient; + +import org.jspecify.annotations.NullMarked;