Merge pull request #24415 from valfirst

* pr/24415:
  Polish "Upgrade to Jackson 2.12.0"
  Upgrade to Jackson 2.12.0

Closes gh-24415
pull/24582/head
Stephane Nicoll 4 years ago
commit 01cfb9e79c

@ -257,10 +257,8 @@ public class JacksonAutoConfiguration {
private void configurePropertyNamingStrategyField(Jackson2ObjectMapperBuilder builder, String fieldName) {
// Find the field (this way we automatically support new constants
// that may be added by Jackson in the future)
Field field = ReflectionUtils.findField(PropertyNamingStrategy.class, fieldName,
PropertyNamingStrategy.class);
Assert.notNull(field, () -> "Constant named '" + fieldName + "' not found on "
+ PropertyNamingStrategy.class.getName());
Field field = findPropertyNamingStrategyField(fieldName);
Assert.notNull(field, () -> "Constant named '" + fieldName + "' not found");
try {
builder.propertyNamingStrategy((PropertyNamingStrategy) field.get(null));
}
@ -269,6 +267,17 @@ public class JacksonAutoConfiguration {
}
}
private Field findPropertyNamingStrategyField(String fieldName) {
try {
return ReflectionUtils.findField(com.fasterxml.jackson.databind.PropertyNamingStrategies.class,
fieldName, PropertyNamingStrategy.class);
}
catch (NoClassDefFoundError ex) { // Fallback pre Jackson 2.12
return ReflectionUtils.findField(PropertyNamingStrategy.class, fieldName,
PropertyNamingStrategy.class);
}
}
private void configureModules(Jackson2ObjectMapperBuilder builder) {
Collection<Module> moduleBeans = getBeans(this.applicationContext, Module.class);
builder.modulesToInstall(moduleBeans.toArray(new Module[0]));

@ -50,8 +50,8 @@ public class JacksonProperties {
private String dateFormat;
/**
* One of the constants on Jackson's PropertyNamingStrategy. Can also be a
* fully-qualified class name of a PropertyNamingStrategy subclass.
* One of the constants on Jackson's PropertyNamingStrategies. Can also be a
* fully-qualified class name of a PropertyNamingStrategy implementation.
*/
private String propertyNamingStrategy;

@ -0,0 +1,57 @@
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.autoconfigure.jackson;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.testsupport.classpath.ClassPathExclusions;
import org.springframework.boot.testsupport.classpath.ClassPathOverrides;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link JacksonAutoConfiguration} using Jackson 2.11.x
*
* @author Stephane Nicoll
*/
@ClassPathExclusions({ "jackson-databind*.jar", "jackson-dataformat-xml*.jar" })
@ClassPathOverrides({ "com.fasterxml.jackson.core:jackson-databind:2.11.3",
"com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.3" })
public class Jackson211AutoConfigurationTests extends JacksonAutoConfigurationTests {
public static final String STRATEGY_CLASS_NAME = "com.fasterxml.jackson.databind.PropertyNamingStrategy$SnakeCaseStrategy";
@Test
void customPropertyNamingStrategyField() {
this.contextRunner.withPropertyValues("spring.jackson.property-naming-strategy:SNAKE_CASE").run((context) -> {
ObjectMapper mapper = context.getBean(ObjectMapper.class);
assertThat(mapper.getPropertyNamingStrategy().getClass().getName()).isEqualTo(STRATEGY_CLASS_NAME);
});
}
@Test
void customPropertyNamingStrategyClass() {
this.contextRunner.withPropertyValues(
"spring.jackson.property-naming-strategy:com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy")
.run((context) -> {
ObjectMapper mapper = context.getBean(ObjectMapper.class);
assertThat(mapper.getPropertyNamingStrategy().getClass().getName()).isEqualTo(STRATEGY_CLASS_NAME);
});
}
}

@ -37,7 +37,7 @@ import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy;
import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
@ -72,7 +72,7 @@ import static org.mockito.Mockito.mock;
*/
class JacksonAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
protected final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class));
@Test
@ -132,7 +132,7 @@ class JacksonAutoConfigurationTests {
@Test
void customPropertyNamingStrategyClass() {
this.contextRunner.withPropertyValues(
"spring.jackson.property-naming-strategy:com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy")
"spring.jackson.property-naming-strategy:com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy")
.run((context) -> {
ObjectMapper mapper = context.getBean(ObjectMapper.class);
assertThat(mapper.getPropertyNamingStrategy()).isInstanceOf(SnakeCaseStrategy.class);

@ -493,7 +493,7 @@ bom {
]
}
}
library("Jackson Bom", "2.11.3") {
library("Jackson Bom", "2.12.0") {
group("com.fasterxml.jackson") {
imports = [
"jackson-bom"

@ -18,7 +18,7 @@ package org.springframework.boot.buildpack.platform.json;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
@ -37,7 +37,7 @@ public final class SharedObjectMapper {
objectMapper.registerModule(new ParameterNamesModule());
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.LOWER_CAMEL_CASE);
INSTANCE = objectMapper;
}

@ -18,7 +18,7 @@ package org.springframework.boot.buildpack.platform.json;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import org.junit.jupiter.api.Test;
@ -42,9 +42,9 @@ class SharedObjectMapperTests {
assertThat(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
.enabledIn(mapper.getDeserializationConfig().getDeserializationFeatures())).isFalse();
assertThat(mapper.getSerializationConfig().getPropertyNamingStrategy())
.isEqualTo(PropertyNamingStrategy.LOWER_CAMEL_CASE);
.isEqualTo(PropertyNamingStrategies.LOWER_CAMEL_CASE);
assertThat(mapper.getDeserializationConfig().getPropertyNamingStrategy())
.isEqualTo(PropertyNamingStrategy.LOWER_CAMEL_CASE);
.isEqualTo(PropertyNamingStrategies.LOWER_CAMEL_CASE);
}
}

Loading…
Cancel
Save