Compatibility with Jackson 2.12 (tested against 2.12.0-rc1)

Closes gh-25907
This commit is contained in:
Juergen Hoeller
2020-10-13 11:04:55 +02:00
parent 4a608e97dc
commit a6e48811c0
15 changed files with 30 additions and 37 deletions

View File

@@ -55,7 +55,7 @@ import org.springframework.util.ClassUtils;
* <li>{@link DeserializationFeature#FAIL_ON_UNKNOWN_PROPERTIES} is disabled</li> * <li>{@link DeserializationFeature#FAIL_ON_UNKNOWN_PROPERTIES} is disabled</li>
* </ul> * </ul>
* *
* <p>Compatible with Jackson 2.6 and higher, as of Spring 4.3. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Mark Pollack * @author Mark Pollack
* @author Dave Syer * @author Dave Syer

View File

@@ -52,7 +52,7 @@ import org.springframework.util.MimeType;
* <li>{@link DeserializationFeature#FAIL_ON_UNKNOWN_PROPERTIES} is disabled</li> * <li>{@link DeserializationFeature#FAIL_ON_UNKNOWN_PROPERTIES} is disabled</li>
* </ul> * </ul>
* *
* <p>Compatible with Jackson 2.9 and higher, as of Spring 5.1. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @author Juergen Hoeller * @author Juergen Hoeller

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2019 the original author or authors. * Copyright 2002-2020 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.
@@ -37,7 +37,7 @@ import org.springframework.util.Assert;
* <p>The default constructor uses the default configuration provided by * <p>The default constructor uses the default configuration provided by
* {@link Jackson2ObjectMapperBuilder}. * {@link Jackson2ObjectMapperBuilder}.
* *
* <p>Compatible with Jackson 2.9 and higher. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Sebastien Deleuze * @author Sebastien Deleuze
* @since 5.0 * @since 5.0

View File

@@ -61,7 +61,7 @@ import org.springframework.util.TypeUtils;
* Abstract base class for Jackson based and content type independent * Abstract base class for Jackson based and content type independent
* {@link HttpMessageConverter} implementations. * {@link HttpMessageConverter} implementations.
* *
* <p>Compatible with Jackson 2.9 and higher, as of Spring 5.0. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Arjen Poutsma * @author Arjen Poutsma
* @author Keith Donald * @author Keith Donald

View File

@@ -92,7 +92,7 @@ import org.springframework.util.xml.StaxUtils;
* support for Kotlin classes and data classes</li> * support for Kotlin classes and data classes</li>
* </ul> * </ul>
* *
* <p>Compatible with Jackson 2.6 and higher, as of Spring 4.3. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Sebastien Deleuze * @author Sebastien Deleuze
* @author Juergen Hoeller * @author Juergen Hoeller
@@ -649,8 +649,8 @@ public class Jackson2ObjectMapperBuilder {
* An option to apply additional customizations directly to the * An option to apply additional customizations directly to the
* {@code ObjectMapper} instances at the end, after all other config * {@code ObjectMapper} instances at the end, after all other config
* properties of the builder have been applied. * properties of the builder have been applied.
* @param configurer a configurer to apply; if invoked multiple times, all * @param configurer a configurer to apply. If several configurers are
* configurers are applied in the same order. * registered, they will get applied in their registration order.
* @since 5.3 * @since 5.3
*/ */
public Jackson2ObjectMapperBuilder postConfigurer(Consumer<ObjectMapper> configurer) { public Jackson2ObjectMapperBuilder postConfigurer(Consumer<ObjectMapper> configurer) {

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2020 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.
@@ -135,7 +135,7 @@ import org.springframework.lang.Nullable;
* &lt;/bean * &lt;/bean
* </pre> * </pre>
* *
* <p>Compatible with Jackson 2.6 and higher, as of Spring 4.3. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author <a href="mailto:dmitry.katsubo@gmail.com">Dmitry Katsubo</a> * @author <a href="mailto:dmitry.katsubo@gmail.com">Dmitry Katsubo</a>
* @author Rossen Stoyanchev * @author Rossen Stoyanchev

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2020 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.
@@ -36,7 +36,7 @@ import org.springframework.lang.Nullable;
* *
* <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}. * <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}.
* *
* <p>Compatible with Jackson 2.9 and higher, as of Spring 5.0. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Arjen Poutsma * @author Arjen Poutsma
* @author Keith Donald * @author Keith Donald

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2020 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.
@@ -35,7 +35,7 @@ import org.springframework.util.Assert;
* *
* <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}. * <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}.
* *
* <p>Compatible with Jackson 2.9 and higher. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Sebastien Deleuze * @author Sebastien Deleuze
* @since 5.0 * @since 5.0

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2019 the original author or authors. * Copyright 2002-2020 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.
@@ -37,7 +37,7 @@ import org.springframework.util.Assert;
* *
* <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}. * <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}.
* *
* <p>Compatible with Jackson 2.9 and higher, as of Spring 5.0. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Sebastien Deleuze * @author Sebastien Deleuze
* @since 4.1 * @since 4.1

View File

@@ -354,7 +354,7 @@ class Jackson2ObjectMapperBuilderTests {
@Test @Test
void propertyNamingStrategy() { void propertyNamingStrategy() {
PropertyNamingStrategy strategy = new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy(); PropertyNamingStrategy strategy = new PropertyNamingStrategy.SnakeCaseStrategy();
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().propertyNamingStrategy(strategy).build(); ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().propertyNamingStrategy(strategy).build();
assertThat(objectMapper.getSerializationConfig().getPropertyNamingStrategy()).isSameAs(strategy); assertThat(objectMapper.getSerializationConfig().getPropertyNamingStrategy()).isSameAs(strategy);
assertThat(objectMapper.getDeserializationConfig().getPropertyNamingStrategy()).isSameAs(strategy); assertThat(objectMapper.getDeserializationConfig().getPropertyNamingStrategy()).isSameAs(strategy);
@@ -430,9 +430,8 @@ class Jackson2ObjectMapperBuilderTests {
assertThat(output).doesNotContain("value2"); assertThat(output).doesNotContain("value2");
} }
@Test // gh-23017 @Test // gh-23017
void postConfigurer() { void postConfigurer() {
JacksonAnnotationIntrospector introspector1 = new JacksonAnnotationIntrospector(); JacksonAnnotationIntrospector introspector1 = new JacksonAnnotationIntrospector();
JacksonAnnotationIntrospector introspector2 = new JacksonAnnotationIntrospector(); JacksonAnnotationIntrospector introspector2 = new JacksonAnnotationIntrospector();
@@ -456,7 +455,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)
@@ -564,7 +563,6 @@ class Jackson2ObjectMapperBuilderTests {
assertThat(objectMapper.getFactory().getClass()).isEqualTo(SmileFactory.class); assertThat(objectMapper.getFactory().getClass()).isEqualTo(SmileFactory.class);
} }
@Test @Test
void visibility() throws JsonProcessingException { void visibility() throws JsonProcessingException {
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
@@ -578,6 +576,7 @@ class Jackson2ObjectMapperBuilderTests {
assertThat(json).doesNotContain("property3"); assertThat(json).doesNotContain("property3");
} }
static class CustomIntegerModule extends Module { static class CustomIntegerModule extends Module {
@Override @Override
@@ -664,6 +663,7 @@ class Jackson2ObjectMapperBuilderTests {
} }
} }
static class JacksonVisibilityBean { static class JacksonVisibilityBean {
@SuppressWarnings("unused") @SuppressWarnings("unused")
@@ -674,9 +674,9 @@ class Jackson2ObjectMapperBuilderTests {
public String getProperty3() { public String getProperty3() {
return null; return null;
} }
} }
static class OffsetDateTimeDeserializer extends JsonDeserializer<OffsetDateTime> { static class OffsetDateTimeDeserializer extends JsonDeserializer<OffsetDateTime> {
private static final String CURRENT_ZONE_OFFSET = OffsetDateTime.now().getOffset().toString(); private static final String CURRENT_ZONE_OFFSET = OffsetDateTime.now().getOffset().toString();
@@ -697,6 +697,7 @@ class Jackson2ObjectMapperBuilderTests {
} }
} }
@JsonDeserialize @JsonDeserialize
static class DemoPojo { static class DemoPojo {
@@ -709,7 +710,6 @@ class Jackson2ObjectMapperBuilderTests {
public void setOffsetDateTime(OffsetDateTime offsetDateTime) { public void setOffsetDateTime(OffsetDateTime offsetDateTime) {
this.offsetDateTime = offsetDateTime; this.offsetDateTime = offsetDateTime;
} }
} }
@SuppressWarnings("serial") @SuppressWarnings("serial")

View File

@@ -261,7 +261,7 @@ public class Jackson2ObjectMapperFactoryBeanTests {
@Test @Test
public void propertyNamingStrategy() { public void propertyNamingStrategy() {
PropertyNamingStrategy strategy = new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy(); PropertyNamingStrategy strategy = new PropertyNamingStrategy.SnakeCaseStrategy();
this.factory.setPropertyNamingStrategy(strategy); this.factory.setPropertyNamingStrategy(strategy);
this.factory.afterPropertiesSet(); this.factory.afterPropertiesSet();

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2019 the original author or authors. * Copyright 2002-2020 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.
@@ -46,7 +46,6 @@ import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
import com.fasterxml.jackson.databind.jsontype.TypeIdResolver; import com.fasterxml.jackson.databind.jsontype.TypeIdResolver;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer; import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder; import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
import com.fasterxml.jackson.databind.type.TypeFactory;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -202,11 +201,6 @@ public class SpringHandlerInstantiatorTests {
return JsonTypeInfo.Id.CUSTOM; return JsonTypeInfo.Id.CUSTOM;
} }
// Only needed when compiling against Jackson 2.7; gone in 2.8
public JavaType typeFromId(String s) {
return TypeFactory.defaultInstance().constructFromCanonical(s);
}
@Override @Override
public String idFromValue(Object value) { public String idFromValue(Object value) {
isAutowiredFiledInitialized = (this.capitalizer != null); isAutowiredFiledInitialized = (this.capitalizer != null);
@@ -227,7 +221,6 @@ public class SpringHandlerInstantiatorTests {
return null; return null;
} }
// New in Jackson 2.7
@Override @Override
public String getDescForKnownTypeIds() { public String getDescForKnownTypeIds() {
return null; return null;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2020 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.
@@ -41,7 +41,7 @@ import org.springframework.web.servlet.view.AbstractView;
* Abstract base class for Jackson based and content type independent * Abstract base class for Jackson based and content type independent
* {@link AbstractView} implementations. * {@link AbstractView} implementations.
* *
* <p>Compatible with Jackson 2.6 and higher, as of Spring 4.3. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Jeremy Grelle * @author Jeremy Grelle
* @author Arjen Poutsma * @author Arjen Poutsma

View File

@@ -42,7 +42,7 @@ import org.springframework.web.servlet.View;
* *
* <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}. * <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}.
* *
* <p>Compatible with Jackson 2.6 and higher, as of Spring 4.3. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Jeremy Grelle * @author Jeremy Grelle
* @author Arjen Poutsma * @author Arjen Poutsma

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2020 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.
@@ -38,7 +38,7 @@ import org.springframework.web.servlet.view.json.AbstractJackson2View;
* *
* <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}. * <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}.
* *
* <p>Compatible with Jackson 2.6 and higher, as of Spring 4.3. * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
* *
* @author Sebastien Deleuze * @author Sebastien Deleuze
* @since 4.1 * @since 4.1