Skip to content

Commit ce97342

Browse files
committed
Consistently use mutable ArrayList for modulesToInstall vs modules
Closes gh-30751 (cherry picked from commit 062d701)
1 parent 2e51aa2 commit ce97342

File tree

2 files changed

+43
-30
lines changed

2 files changed

+43
-30
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ public Jackson2ObjectMapperBuilder modules(Consumer<List<Module>> consumer) {
580580
* @see com.fasterxml.jackson.databind.Module
581581
*/
582582
public Jackson2ObjectMapperBuilder modulesToInstall(Module... modules) {
583-
this.modules = Arrays.asList(modules);
583+
this.modules = new ArrayList<>(Arrays.asList(modules));
584584
this.findWellKnownModules = true;
585585
return this;
586586
}

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

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -229,26 +229,6 @@ void wrongTimeZoneStringSetter() {
229229
Jackson2ObjectMapperBuilder.json().timeZone(zoneId).build());
230230
}
231231

232-
@Test
233-
void modules() {
234-
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
235-
SimpleModule module = new SimpleModule();
236-
module.addSerializer(Integer.class, serializer1);
237-
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(module).build();
238-
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
239-
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
240-
}
241-
242-
@Test
243-
void modulesWithConsumer() {
244-
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
245-
SimpleModule module = new SimpleModule();
246-
module.addSerializer(Integer.class, serializer1);
247-
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(list -> list.add(module) ).build();
248-
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
249-
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
250-
}
251-
252232
@Test
253233
void modulesToInstallByClass() {
254234
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
@@ -351,14 +331,15 @@ void registerMultipleModulesWithNullTypeId() {
351331
barModule.addSerializer(new BarSerializer());
352332
builder.modulesToInstall(fooModule, barModule);
353333
ObjectMapper objectMapper = builder.build();
334+
354335
assertThat(StreamSupport
355-
.stream(getSerializerFactoryConfig(objectMapper).serializers().spliterator(), false)
356-
.filter(s -> s.findSerializer(null, SimpleType.construct(Foo.class), null) != null)
357-
.count()).isEqualTo(1);
336+
.stream(getSerializerFactoryConfig(objectMapper).serializers().spliterator(), false)
337+
.filter(s -> s.findSerializer(null, SimpleType.construct(Foo.class), null) != null)
338+
.count()).isEqualTo(1);
358339
assertThat(StreamSupport
359-
.stream(getSerializerFactoryConfig(objectMapper).serializers().spliterator(), false)
360-
.filter(s -> s.findSerializer(null, SimpleType.construct(Bar.class), null) != null)
361-
.count()).isEqualTo(1);
340+
.stream(getSerializerFactoryConfig(objectMapper).serializers().spliterator(), false)
341+
.filter(s -> s.findSerializer(null, SimpleType.construct(Bar.class), null) != null)
342+
.count()).isEqualTo(1);
362343
}
363344

364345
private static SerializerFactoryConfig getSerializerFactoryConfig(ObjectMapper objectMapper) {
@@ -369,6 +350,38 @@ private static DeserializerFactoryConfig getDeserializerFactoryConfig(ObjectMapp
369350
return ((BasicDeserializerFactory) objectMapper.getDeserializationContext().getFactory()).getFactoryConfig();
370351
}
371352

353+
@Test
354+
void modules() {
355+
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
356+
SimpleModule module = new SimpleModule();
357+
module.addSerializer(Integer.class, serializer1);
358+
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(module).build();
359+
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
360+
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
361+
}
362+
363+
@Test
364+
void modulesWithConsumer() {
365+
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
366+
SimpleModule module = new SimpleModule();
367+
module.addSerializer(Integer.class, serializer1);
368+
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(list -> list.add(module) ).build();
369+
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
370+
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
371+
}
372+
373+
@Test
374+
void modulesWithConsumerAfterModulesToInstall() {
375+
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
376+
SimpleModule module = new SimpleModule();
377+
module.addSerializer(Integer.class, serializer1);
378+
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
379+
.modulesToInstall(new JavaTimeModule())
380+
.modules(list -> list.add(module) ).build();
381+
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
382+
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
383+
}
384+
372385
@Test
373386
void propertyNamingStrategy() {
374387
PropertyNamingStrategy strategy = new PropertyNamingStrategy.SnakeCaseStrategy();
@@ -381,7 +394,7 @@ void propertyNamingStrategy() {
381394
void serializerByType() {
382395
JsonSerializer<Number> serializer = new NumberSerializer(Integer.class);
383396
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
384-
.modules(new ArrayList<>()) // Disable well-known modules detection
397+
.modules(new ArrayList<>()) // disable well-known modules detection
385398
.serializerByType(Boolean.class, serializer)
386399
.build();
387400
assertThat(getSerializerFactoryConfig(objectMapper).hasSerializers()).isTrue();
@@ -393,7 +406,7 @@ void serializerByType() {
393406
void deserializerByType() throws JsonMappingException {
394407
JsonDeserializer<Date> deserializer = new DateDeserializers.DateDeserializer();
395408
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
396-
.modules(new ArrayList<>()) // Disable well-known modules detection
409+
.modules(new ArrayList<>()) // disable well-known modules detection
397410
.deserializerByType(Date.class, deserializer)
398411
.build();
399412
assertThat(getDeserializerFactoryConfig(objectMapper).hasDeserializers()).isTrue();
@@ -472,7 +485,7 @@ void completeSetup() throws JsonMappingException {
472485
JsonSerializer<Number> serializer2 = new NumberSerializer(Integer.class);
473486

474487
Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json()
475-
.modules(new ArrayList<>()) // Disable well-known modules detection
488+
.modules(new ArrayList<>()) // disable well-known modules detection
476489
.serializers(serializer1)
477490
.serializersByType(Collections.singletonMap(Boolean.class, serializer2))
478491
.deserializersByType(deserializerMap)

0 commit comments

Comments
 (0)