Add Consumer methods to configure Jackson modules
Closes gh-28633
This commit is contained in:
parent
cdd4e8cd7f
commit
e50131d454
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2021 the original author or authors.
|
* Copyright 2002-2022 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -521,7 +521,7 @@ public class Jackson2ObjectMapperBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specify one or more modules to be registered with the {@link ObjectMapper}.
|
* Specify the modules to be registered with the {@link ObjectMapper}.
|
||||||
* <p>Multiple invocations are not additive, the last one defines the modules to
|
* <p>Multiple invocations are not additive, the last one defines the modules to
|
||||||
* register.
|
* register.
|
||||||
* <p>Note: If this is set, no finding of modules is going to happen - not by
|
* <p>Note: If this is set, no finding of modules is going to happen - not by
|
||||||
|
@ -538,15 +538,9 @@ public class Jackson2ObjectMapperBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a complete list of modules to be registered with the {@link ObjectMapper}.
|
* Variant of {@link #modules(Module...)} with a {@link List}.
|
||||||
* <p>Multiple invocations are not additive, the last one defines the modules to
|
|
||||||
* register.
|
|
||||||
* <p>Note: If this is set, no finding of modules is going to happen - not by
|
|
||||||
* Jackson, and not by Spring either (see {@link #findModulesViaServiceLoader}).
|
|
||||||
* As a consequence, specifying an empty list here will suppress any kind of
|
|
||||||
* module detection.
|
|
||||||
* <p>Specify either this or {@link #modulesToInstall}, not both.
|
|
||||||
* @see #modules(Module...)
|
* @see #modules(Module...)
|
||||||
|
* @see #modules(Consumer)
|
||||||
* @see com.fasterxml.jackson.databind.Module
|
* @see com.fasterxml.jackson.databind.Module
|
||||||
*/
|
*/
|
||||||
public Jackson2ObjectMapperBuilder modules(List<Module> modules) {
|
public Jackson2ObjectMapperBuilder modules(List<Module> modules) {
|
||||||
|
@ -556,6 +550,22 @@ public class Jackson2ObjectMapperBuilder {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Variant of {@link #modules(Module...)} with a {@link Consumer} for full
|
||||||
|
* control over the underlying list of modules.
|
||||||
|
* @since 6.0
|
||||||
|
* @see #modules(Module...)
|
||||||
|
* @see #modules(List)
|
||||||
|
* @see com.fasterxml.jackson.databind.Module
|
||||||
|
*/
|
||||||
|
public Jackson2ObjectMapperBuilder modules(Consumer<List<Module>> consumer) {
|
||||||
|
this.modules = (this.modules != null ? this.modules : new ArrayList<>());
|
||||||
|
this.findModulesViaServiceLoader = false;
|
||||||
|
this.findWellKnownModules = false;
|
||||||
|
consumer.accept(this.modules);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specify one or more modules to be registered with the {@link ObjectMapper}.
|
* Specify one or more modules to be registered with the {@link ObjectMapper}.
|
||||||
* <p>Multiple invocations are not additive, the last one defines the modules
|
* <p>Multiple invocations are not additive, the last one defines the modules
|
||||||
|
@ -566,6 +576,7 @@ public class Jackson2ObjectMapperBuilder {
|
||||||
* allowing to eventually override their configuration.
|
* allowing to eventually override their configuration.
|
||||||
* <p>Specify either this or {@link #modules(Module...)}, not both.
|
* <p>Specify either this or {@link #modules(Module...)}, not both.
|
||||||
* @since 4.1.5
|
* @since 4.1.5
|
||||||
|
* @see #modulesToInstall(Consumer)
|
||||||
* @see #modulesToInstall(Class...)
|
* @see #modulesToInstall(Class...)
|
||||||
* @see com.fasterxml.jackson.databind.Module
|
* @see com.fasterxml.jackson.databind.Module
|
||||||
*/
|
*/
|
||||||
|
@ -575,6 +586,21 @@ public class Jackson2ObjectMapperBuilder {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Variant of {@link #modulesToInstall(Module...)} with a {@link Consumer}
|
||||||
|
* for full control over the underlying list of modules.
|
||||||
|
* @since 6.0
|
||||||
|
* @see #modulesToInstall(Module...)
|
||||||
|
* @see #modulesToInstall(Class...)
|
||||||
|
* @see com.fasterxml.jackson.databind.Module
|
||||||
|
*/
|
||||||
|
public Jackson2ObjectMapperBuilder modulesToInstall(Consumer<List<Module>> consumer) {
|
||||||
|
this.modules = (this.modules != null ? this.modules : new ArrayList<>());
|
||||||
|
this.findWellKnownModules = true;
|
||||||
|
consumer.accept(this.modules);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specify one or more modules by class to be registered with
|
* Specify one or more modules by class to be registered with
|
||||||
* the {@link ObjectMapper}.
|
* the {@link ObjectMapper}.
|
||||||
|
@ -586,6 +612,7 @@ public class Jackson2ObjectMapperBuilder {
|
||||||
* allowing to eventually override their configuration.
|
* allowing to eventually override their configuration.
|
||||||
* <p>Specify either this or {@link #modules(Module...)}, not both.
|
* <p>Specify either this or {@link #modules(Module...)}, not both.
|
||||||
* @see #modulesToInstall(Module...)
|
* @see #modulesToInstall(Module...)
|
||||||
|
* @see #modulesToInstall(Consumer)
|
||||||
* @see com.fasterxml.jackson.databind.Module
|
* @see com.fasterxml.jackson.databind.Module
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2020 the original author or authors.
|
* Copyright 2002-2022 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -241,6 +241,16 @@ class Jackson2ObjectMapperBuilderTests {
|
||||||
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null)).isSameAs(serializer1);
|
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()
|
||||||
|
@ -259,6 +269,15 @@ class Jackson2ObjectMapperBuilderTests {
|
||||||
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null).getClass()).isSameAs(CustomIntegerSerializer.class);
|
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null).getClass()).isSameAs(CustomIntegerSerializer.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void modulesToInstallWithConsumer() {
|
||||||
|
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
|
||||||
|
.modulesToInstall(list -> list.add(new CustomIntegerModule()))
|
||||||
|
.build();
|
||||||
|
Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next();
|
||||||
|
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null).getClass()).isSameAs(CustomIntegerSerializer.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void wellKnownModules() throws JsonProcessingException, UnsupportedEncodingException {
|
void wellKnownModules() throws JsonProcessingException, UnsupportedEncodingException {
|
||||||
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build();
|
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build();
|
||||||
|
|
Loading…
Reference in New Issue