Skip to content

Commit 5ef9972

Browse files
committed
Allow to disable defaults in HttpMessageConverters
The builder for `HttpMessageConverters` allows for auto-detection of message converters on the classpath and their default registration when `registerDefaults()` is called. Once called, there is no way to undo this. This commit adds a new `disableDefaults()` method to disable the default registration and take full control over the list of message converters. Closes gh-36303
1 parent a9b1d63 commit 5ef9972

3 files changed

Lines changed: 33 additions & 0 deletions

File tree

spring-web/src/main/java/org/springframework/http/converter/DefaultHttpMessageConverters.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,12 @@ public DefaultClientBuilder registerDefaults() {
389389
return this;
390390
}
391391

392+
@Override
393+
public ClientBuilder disableDefaults() {
394+
this.registerDefaults = false;
395+
return this;
396+
}
397+
392398
@Override
393399
public ClientBuilder withStringConverter(HttpMessageConverter<?> stringConverter) {
394400
setStringConverter(stringConverter);
@@ -495,6 +501,12 @@ public ServerBuilder registerDefaults() {
495501
return this;
496502
}
497503

504+
@Override
505+
public ServerBuilder disableDefaults() {
506+
this.registerDefaults = false;
507+
return this;
508+
}
509+
498510
@Override
499511
public ServerBuilder withStringConverter(HttpMessageConverter<?> stringConverter) {
500512
setStringConverter(stringConverter);

spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverters.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,15 @@ interface Builder<T extends Builder<T>> {
9797
*/
9898
T registerDefaults();
9999

100+
/**
101+
* Prevent the registration of default converters using classpath detection.
102+
* Manual registrations like {@link #withJsonConverter(HttpMessageConverter)} are
103+
* still allowed. If both {@link #registerDefaults()} and this method are called,
104+
* the latest call wins.
105+
* @since 7.0.4
106+
*/
107+
T disableDefaults();
108+
100109
/**
101110
* Override the default String {@code HttpMessageConverter}
102111
* with any converter supporting String conversion.

spring-web/src/test/java/org/springframework/http/converter/DefaultHttpMessageConvertersTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,12 @@ void defaultConverters() {
125125
RssChannelHttpMessageConverter.class);
126126
}
127127

128+
@Test
129+
void disableDefaults() {
130+
var converters = HttpMessageConverters.forClient().registerDefaults().disableDefaults().build();
131+
assertThat(converters).isEmpty();
132+
}
133+
128134
@Test
129135
void multipartConverterContainsOtherConverters() {
130136
var converters = HttpMessageConverters.forClient().registerDefaults().build();
@@ -242,6 +248,12 @@ void defaultConverters() {
242248
RssChannelHttpMessageConverter.class);
243249
}
244250

251+
@Test
252+
void disableDefaults() {
253+
var converters = HttpMessageConverters.forServer().registerDefaults().disableDefaults().build();
254+
assertThat(converters).isEmpty();
255+
}
256+
245257
@Test
246258
void multipartConverterContainsOtherConverters() {
247259
var converters = HttpMessageConverters.forServer().registerDefaults().build();

0 commit comments

Comments
 (0)