Consistently use mutable ArrayList for modulesToInstall vs modules

Closes gh-30751

(cherry picked from commit 062d701ae1)
This commit is contained in:
Juergen Hoeller
2023-06-26 12:34:54 +02:00
parent 2e51aa250e
commit ce97342fee
2 changed files with 43 additions and 30 deletions

View File

@@ -580,7 +580,7 @@ public class Jackson2ObjectMapperBuilder {
* @see com.fasterxml.jackson.databind.Module * @see com.fasterxml.jackson.databind.Module
*/ */
public Jackson2ObjectMapperBuilder modulesToInstall(Module... modules) { public Jackson2ObjectMapperBuilder modulesToInstall(Module... modules) {
this.modules = Arrays.asList(modules); this.modules = new ArrayList<>(Arrays.asList(modules));
this.findWellKnownModules = true; this.findWellKnownModules = true;
return this; return this;
} }

View File

@@ -229,26 +229,6 @@ class Jackson2ObjectMapperBuilderTests {
Jackson2ObjectMapperBuilder.json().timeZone(zoneId).build()); Jackson2ObjectMapperBuilder.json().timeZone(zoneId).build());
} }
@Test
void modules() {
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
SimpleModule module = new SimpleModule();
module.addSerializer(Integer.class, serializer1);
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(module).build();
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
}
@Test
void modulesWithConsumer() {
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
SimpleModule module = new SimpleModule();
module.addSerializer(Integer.class, serializer1);
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(list -> list.add(module) ).build();
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
}
@Test @Test
void modulesToInstallByClass() { void modulesToInstallByClass() {
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
@@ -351,14 +331,15 @@ class Jackson2ObjectMapperBuilderTests {
barModule.addSerializer(new BarSerializer()); barModule.addSerializer(new BarSerializer());
builder.modulesToInstall(fooModule, barModule); builder.modulesToInstall(fooModule, barModule);
ObjectMapper objectMapper = builder.build(); ObjectMapper objectMapper = builder.build();
assertThat(StreamSupport assertThat(StreamSupport
.stream(getSerializerFactoryConfig(objectMapper).serializers().spliterator(), false) .stream(getSerializerFactoryConfig(objectMapper).serializers().spliterator(), false)
.filter(s -> s.findSerializer(null, SimpleType.construct(Foo.class), null) != null) .filter(s -> s.findSerializer(null, SimpleType.construct(Foo.class), null) != null)
.count()).isEqualTo(1); .count()).isEqualTo(1);
assertThat(StreamSupport assertThat(StreamSupport
.stream(getSerializerFactoryConfig(objectMapper).serializers().spliterator(), false) .stream(getSerializerFactoryConfig(objectMapper).serializers().spliterator(), false)
.filter(s -> s.findSerializer(null, SimpleType.construct(Bar.class), null) != null) .filter(s -> s.findSerializer(null, SimpleType.construct(Bar.class), null) != null)
.count()).isEqualTo(1); .count()).isEqualTo(1);
} }
private static SerializerFactoryConfig getSerializerFactoryConfig(ObjectMapper objectMapper) { private static SerializerFactoryConfig getSerializerFactoryConfig(ObjectMapper objectMapper) {
@@ -369,6 +350,38 @@ class Jackson2ObjectMapperBuilderTests {
return ((BasicDeserializerFactory) objectMapper.getDeserializationContext().getFactory()).getFactoryConfig(); return ((BasicDeserializerFactory) objectMapper.getDeserializationContext().getFactory()).getFactoryConfig();
} }
@Test
void modules() {
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
SimpleModule module = new SimpleModule();
module.addSerializer(Integer.class, serializer1);
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(module).build();
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
}
@Test
void modulesWithConsumer() {
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
SimpleModule module = new SimpleModule();
module.addSerializer(Integer.class, serializer1);
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(list -> list.add(module) ).build();
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
}
@Test
void modulesWithConsumerAfterModulesToInstall() {
NumberSerializer serializer1 = new NumberSerializer(Integer.class);
SimpleModule module = new SimpleModule();
module.addSerializer(Integer.class, serializer1);
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
.modulesToInstall(new JavaTimeModule())
.modules(list -> list.add(module) ).build();
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
}
@Test @Test
void propertyNamingStrategy() { void propertyNamingStrategy() {
PropertyNamingStrategy strategy = new PropertyNamingStrategy.SnakeCaseStrategy(); PropertyNamingStrategy strategy = new PropertyNamingStrategy.SnakeCaseStrategy();
@@ -381,7 +394,7 @@ class Jackson2ObjectMapperBuilderTests {
void serializerByType() { void serializerByType() {
JsonSerializer<Number> serializer = new NumberSerializer(Integer.class); JsonSerializer<Number> serializer = new NumberSerializer(Integer.class);
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
.modules(new ArrayList<>()) // Disable well-known modules detection .modules(new ArrayList<>()) // disable well-known modules detection
.serializerByType(Boolean.class, serializer) .serializerByType(Boolean.class, serializer)
.build(); .build();
assertThat(getSerializerFactoryConfig(objectMapper).hasSerializers()).isTrue(); assertThat(getSerializerFactoryConfig(objectMapper).hasSerializers()).isTrue();
@@ -393,7 +406,7 @@ class Jackson2ObjectMapperBuilderTests {
void deserializerByType() throws JsonMappingException { void deserializerByType() throws JsonMappingException {
JsonDeserializer<Date> deserializer = new DateDeserializers.DateDeserializer(); JsonDeserializer<Date> deserializer = new DateDeserializers.DateDeserializer();
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
.modules(new ArrayList<>()) // Disable well-known modules detection .modules(new ArrayList<>()) // disable well-known modules detection
.deserializerByType(Date.class, deserializer) .deserializerByType(Date.class, deserializer)
.build(); .build();
assertThat(getDeserializerFactoryConfig(objectMapper).hasDeserializers()).isTrue(); assertThat(getDeserializerFactoryConfig(objectMapper).hasDeserializers()).isTrue();
@@ -472,7 +485,7 @@ class Jackson2ObjectMapperBuilderTests {
JsonSerializer<Number> serializer2 = new NumberSerializer(Integer.class); JsonSerializer<Number> serializer2 = new NumberSerializer(Integer.class);
Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json() Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json()
.modules(new ArrayList<>()) // Disable well-known modules detection .modules(new ArrayList<>()) // disable well-known modules detection
.serializers(serializer1) .serializers(serializer1)
.serializersByType(Collections.singletonMap(Boolean.class, serializer2)) .serializersByType(Collections.singletonMap(Boolean.class, serializer2))
.deserializersByType(deserializerMap) .deserializersByType(deserializerMap)