Switch Jackson default mapping default from NON_FINAL to EVERYTHING.

Closes #1566
Original pull request: #2237.
This commit is contained in:
Christoph Strobl
2022-01-13 10:13:51 +01:00
committed by Mark Paluch
parent e53a5762b1
commit 93c25b0608
4 changed files with 73 additions and 6 deletions

View File

@@ -183,6 +183,15 @@ public abstract class Jackson2HashMapperUnitTests extends AbstractHashMapperTest
assertBackAndForwardMapping(source);
}
@Test // GH-1566
void mapFinalClass() {
MeFinal source = new MeFinal();
source.value = "id-1";
assertBackAndForwardMapping(source);
}
@Data
public static class WithList {
List<String> strings;
@@ -206,4 +215,9 @@ public abstract class Jackson2HashMapperUnitTests extends AbstractHashMapperTest
private LocalDate localDate;
private LocalDateTime localDateTime;
}
@Data
public static final class MeFinal {
private String value;
}
}

View File

@@ -20,11 +20,12 @@ import static org.mockito.Mockito.*;
import static org.springframework.test.util.ReflectionTestUtils.*;
import static org.springframework.util.ObjectUtils.*;
import lombok.Data;
import java.io.IOException;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.BeanUtils;
import org.springframework.cache.support.NullValue;
@@ -141,7 +142,7 @@ class GenericJackson2JsonRedisSerializerUnitTests {
void shouldSerializeNullValueWithCustomObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY);
mapper.enableDefaultTyping(DefaultTyping.EVERYTHING, As.PROPERTY);
GenericJackson2JsonRedisSerializer.registerNullValueSerializer(mapper, null);
GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer(mapper);
@@ -149,6 +150,18 @@ class GenericJackson2JsonRedisSerializerUnitTests {
serializeAndDeserializeNullValue(serializer);
}
@Test // GH-1566
void deserializeShouldBeAbleToRestoreFinalObjectAfterSerialization() {
GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
FinalObject source = new FinalObject();
source.longValue = 1L;
source.simpleObject = new SimpleObject(2L);
assertThat(serializer.deserialize(serializer.serialize(source))).isEqualTo(source);
}
private static void serializeAndDeserializeNullValue(GenericJackson2JsonRedisSerializer serializer) {
NullValue nv = BeanUtils.instantiateClass(NullValue.class);
@@ -201,6 +214,12 @@ class GenericJackson2JsonRedisSerializerUnitTests {
}
@Data
static final class FinalObject {
public Long longValue;
SimpleObject simpleObject;
}
static class SimpleObject {
public Long longValue;