Preparations for Jackson 2.5

Issue: SPR-12565
This commit is contained in:
Juergen Hoeller 2014-12-22 18:46:57 +01:00
parent 7317457bb1
commit c114c08922
2 changed files with 25 additions and 9 deletions

View File

@ -40,7 +40,6 @@ import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.cfg.HandlerInstantiator; import com.fasterxml.jackson.databind.cfg.HandlerInstantiator;
import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import javafx.application.Application;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.FatalBeanException; import org.springframework.beans.FatalBeanException;
@ -441,6 +440,7 @@ public class Jackson2ObjectMapperBuilder {
* settings. This can be applied to any number of {@code ObjectMappers}. * settings. This can be applied to any number of {@code ObjectMappers}.
* @param objectMapper the ObjectMapper to configure * @param objectMapper the ObjectMapper to configure
*/ */
@SuppressWarnings("deprecation")
public void configure(ObjectMapper objectMapper) { public void configure(ObjectMapper objectMapper) {
Assert.notNull(objectMapper, "ObjectMapper must not be null"); Assert.notNull(objectMapper, "ObjectMapper must not be null");
@ -495,13 +495,15 @@ public class Jackson2ObjectMapperBuilder {
objectMapper.setPropertyNamingStrategy(this.propertyNamingStrategy); objectMapper.setPropertyNamingStrategy(this.propertyNamingStrategy);
} }
for (Class<?> target : this.mixIns.keySet()) { for (Class<?> target : this.mixIns.keySet()) {
// Deprecated as of Jackson 2.5, but just in favor of a fluent variant.
objectMapper.addMixInAnnotations(target, this.mixIns.get(target)); objectMapper.addMixInAnnotations(target, this.mixIns.get(target));
} }
if (this.handlerInstantiator != null) { if (this.handlerInstantiator != null) {
objectMapper.setHandlerInstantiator(this.handlerInstantiator); objectMapper.setHandlerInstantiator(this.handlerInstantiator);
} }
else if (this.applicationContext != null) { else if (this.applicationContext != null) {
objectMapper.setHandlerInstantiator(new SpringHandlerInstantiator(this.applicationContext.getAutowireCapableBeanFactory())); objectMapper.setHandlerInstantiator(
new SpringHandlerInstantiator(this.applicationContext.getAutowireCapableBeanFactory()));
} }
} }

View File

@ -26,6 +26,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec; import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DatabindContext;
import com.fasterxml.jackson.databind.DeserializationConfig; import com.fasterxml.jackson.databind.DeserializationConfig;
import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JavaType;
@ -46,9 +47,6 @@ 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 com.fasterxml.jackson.databind.type.TypeFactory;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -57,6 +55,8 @@ import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostP
import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.support.RootBeanDefinition;
import static org.junit.Assert.*;
/** /**
* Test class for {@link SpringHandlerInstantiatorTests}. * Test class for {@link SpringHandlerInstantiatorTests}.
* *
@ -65,8 +65,10 @@ import org.springframework.beans.factory.support.RootBeanDefinition;
public class SpringHandlerInstantiatorTests { public class SpringHandlerInstantiatorTests {
private SpringHandlerInstantiator instantiator; private SpringHandlerInstantiator instantiator;
private ObjectMapper objectMapper; private ObjectMapper objectMapper;
@Before @Before
public void setup() { public void setup() {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
@ -78,6 +80,7 @@ public class SpringHandlerInstantiatorTests {
objectMapper = Jackson2ObjectMapperBuilder.json().handlerInstantiator(instantiator).build(); objectMapper = Jackson2ObjectMapperBuilder.json().handlerInstantiator(instantiator).build();
} }
@Test @Test
public void autowiredSerializer() throws JsonProcessingException { public void autowiredSerializer() throws JsonProcessingException {
User user = new User("bob"); User user = new User("bob");
@ -113,6 +116,7 @@ public class SpringHandlerInstantiatorTests {
assertTrue(CustomTypeIdResolver.isAutowiredFiledInitialized); assertTrue(CustomTypeIdResolver.isAutowiredFiledInitialized);
} }
public static class UserDeserializer extends JsonDeserializer<User> { public static class UserDeserializer extends JsonDeserializer<User> {
@Autowired @Autowired
@ -124,9 +128,9 @@ public class SpringHandlerInstantiatorTests {
JsonNode node = oc.readTree(jsonParser); JsonNode node = oc.readTree(jsonParser);
return new User(this.capitalizer.capitalize(node.get("username").asText())); return new User(this.capitalizer.capitalize(node.get("username").asText()));
} }
} }
public static class UserSerializer extends JsonSerializer<User> { public static class UserSerializer extends JsonSerializer<User> {
@Autowired @Autowired
@ -140,6 +144,7 @@ public class SpringHandlerInstantiatorTests {
} }
} }
public static class UpperCaseKeyDeserializer extends KeyDeserializer { public static class UpperCaseKeyDeserializer extends KeyDeserializer {
@Autowired @Autowired
@ -151,6 +156,7 @@ public class SpringHandlerInstantiatorTests {
} }
} }
public static class CustomTypeResolverBuilder extends StdTypeResolverBuilder { public static class CustomTypeResolverBuilder extends StdTypeResolverBuilder {
@Autowired @Autowired
@ -170,6 +176,7 @@ public class SpringHandlerInstantiatorTests {
} }
} }
public static class CustomTypeIdResolver implements TypeIdResolver { public static class CustomTypeIdResolver implements TypeIdResolver {
@Autowired @Autowired
@ -178,7 +185,6 @@ public class SpringHandlerInstantiatorTests {
public static boolean isAutowiredFiledInitialized = false; public static boolean isAutowiredFiledInitialized = false;
public CustomTypeIdResolver() { public CustomTypeIdResolver() {
} }
@Override @Override
@ -204,15 +210,20 @@ public class SpringHandlerInstantiatorTests {
@Override @Override
public void init(JavaType type) { public void init(JavaType type) {
} }
@Override @Override
public String idFromBaseType() { public String idFromBaseType() {
return null; return null;
} }
// New in Jackson 2.5
public JavaType typeFromId(DatabindContext context, String id) {
return null;
}
} }
@JsonDeserialize(using = UserDeserializer.class) @JsonDeserialize(using = UserDeserializer.class)
@JsonSerialize(using = UserSerializer.class) @JsonSerialize(using = UserSerializer.class)
public static class User { public static class User {
@ -229,6 +240,7 @@ public class SpringHandlerInstantiatorTests {
public String getUsername() { return this.username; } public String getUsername() { return this.username; }
} }
public static class SecurityRegistry { public static class SecurityRegistry {
@JsonDeserialize(keyUsing = UpperCaseKeyDeserializer.class) @JsonDeserialize(keyUsing = UpperCaseKeyDeserializer.class)
@ -243,6 +255,7 @@ public class SpringHandlerInstantiatorTests {
} }
} }
@JsonTypeInfo(use = JsonTypeInfo.Id.CUSTOM, property = "type") @JsonTypeInfo(use = JsonTypeInfo.Id.CUSTOM, property = "type")
@JsonTypeResolver(CustomTypeResolverBuilder.class) @JsonTypeResolver(CustomTypeResolverBuilder.class)
@JsonTypeIdResolver(CustomTypeIdResolver.class) @JsonTypeIdResolver(CustomTypeIdResolver.class)
@ -255,7 +268,6 @@ public class SpringHandlerInstantiatorTests {
} }
public Group() { public Group() {
} }
public String getType() { public String getType() {
@ -263,10 +275,12 @@ public class SpringHandlerInstantiatorTests {
} }
} }
public static class Capitalizer { public static class Capitalizer {
public String capitalize(String text) { public String capitalize(String text) {
return text.toUpperCase(); return text.toUpperCase();
} }
} }
} }