Skip to content

Commit 2f43f77

Browse files
Sam-Kruglovsdeleuze
authored andcommitted
Add ParameterNamesModule to "well known" jackson modules
See spring-projectsgh-27511
1 parent f054c2e commit 2f43f77

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

spring-web/spring-web.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ dependencies {
8181
testImplementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8")
8282
testImplementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
8383
testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin")
84+
testImplementation("com.fasterxml.jackson.module:jackson-module-parameter-names")
8485
testImplementation("com.squareup.okhttp3:mockwebserver")
8586
testImplementation("io.micrometer:micrometer-observation-test")
8687
testImplementation("io.projectreactor:reactor-test")

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

+10
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,16 @@ private void registerWellKnownModulesIfAvailable(MultiValueMap<Object, Module> m
859859
// jackson-datatype-jdk8 not available
860860
}
861861

862+
try {
863+
Class<? extends Module> parameterNamesModuleClass = (Class<? extends Module>)
864+
ClassUtils.forName("com.fasterxml.jackson.module.paramnames.ParameterNamesModule", this.moduleClassLoader);
865+
Module parameterNamesModule = BeanUtils.instantiateClass(parameterNamesModuleClass);
866+
modulesToRegister.set(parameterNamesModule.getTypeId(), parameterNamesModule);
867+
}
868+
catch (ClassNotFoundException ex) {
869+
// jackson-module-parameter-names not available
870+
}
871+
862872
try {
863873
Class<? extends Module> javaTimeModuleClass = (Class<? extends Module>)
864874
ClassUtils.forName("com.fasterxml.jackson.datatype.jsr310.JavaTimeModule", this.moduleClassLoader);

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

+24
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@
8585
import org.springframework.util.StringUtils;
8686

8787
import static org.assertj.core.api.Assertions.assertThat;
88+
import static org.assertj.core.api.Assertions.assertThatCode;
89+
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
8890
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
8991

9092
/**
@@ -255,6 +257,25 @@ void modulesToInstallWithConsumer() {
255257
assertThat(serializers.findSerializer(null, SimpleType.construct(Integer.class), null).getClass()).isSameAs(CustomIntegerSerializer.class);
256258
}
257259

260+
static class ParameterModuleDto {
261+
262+
int x;
263+
int y;
264+
265+
ParameterModuleDto(int x, int y) {
266+
this.x = x;
267+
this.y = y;
268+
}
269+
270+
int getX() {
271+
return x;
272+
}
273+
274+
int getY() {
275+
return y;
276+
}
277+
}
278+
258279
@Test
259280
void wellKnownModules() throws JsonProcessingException, UnsupportedEncodingException {
260281
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build();
@@ -265,6 +286,9 @@ void wellKnownModules() throws JsonProcessingException, UnsupportedEncodingExcep
265286
Optional<String> optional = Optional.of("test");
266287
assertThat(new String(objectMapper.writeValueAsBytes(optional), "UTF-8")).isEqualTo("\"test\"");
267288

289+
290+
assertThatCode(() -> objectMapper.readValue("{\"x\":1,\"y\":2}", ParameterModuleDto.class)).doesNotThrowAnyException();
291+
268292
// Kotlin module
269293
IntRange range = new IntRange(1, 3);
270294
assertThat(new String(objectMapper.writeValueAsBytes(range), "UTF-8")).isEqualTo("{\"start\":1,\"end\":3}");

0 commit comments

Comments
 (0)