Skip to content

Commit c114c08

Browse files
committed
Preparations for Jackson 2.5
Issue: SPR-12565
1 parent 7317457 commit c114c08

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import com.fasterxml.jackson.databind.cfg.HandlerInstantiator;
4141
import com.fasterxml.jackson.databind.module.SimpleModule;
4242
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
43-
import javafx.application.Application;
4443

4544
import org.springframework.beans.BeanUtils;
4645
import org.springframework.beans.FatalBeanException;
@@ -441,6 +440,7 @@ public <T extends ObjectMapper> T build() {
441440
* settings. This can be applied to any number of {@code ObjectMappers}.
442441
* @param objectMapper the ObjectMapper to configure
443442
*/
443+
@SuppressWarnings("deprecation")
444444
public void configure(ObjectMapper objectMapper) {
445445
Assert.notNull(objectMapper, "ObjectMapper must not be null");
446446

@@ -495,13 +495,15 @@ public void configure(ObjectMapper objectMapper) {
495495
objectMapper.setPropertyNamingStrategy(this.propertyNamingStrategy);
496496
}
497497
for (Class<?> target : this.mixIns.keySet()) {
498+
// Deprecated as of Jackson 2.5, but just in favor of a fluent variant.
498499
objectMapper.addMixInAnnotations(target, this.mixIns.get(target));
499500
}
500501
if (this.handlerInstantiator != null) {
501502
objectMapper.setHandlerInstantiator(this.handlerInstantiator);
502503
}
503504
else if (this.applicationContext != null) {
504-
objectMapper.setHandlerInstantiator(new SpringHandlerInstantiator(this.applicationContext.getAutowireCapableBeanFactory()));
505+
objectMapper.setHandlerInstantiator(
506+
new SpringHandlerInstantiator(this.applicationContext.getAutowireCapableBeanFactory()));
505507
}
506508
}
507509

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

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.fasterxml.jackson.core.JsonParser;
2727
import com.fasterxml.jackson.core.JsonProcessingException;
2828
import com.fasterxml.jackson.core.ObjectCodec;
29+
import com.fasterxml.jackson.databind.DatabindContext;
2930
import com.fasterxml.jackson.databind.DeserializationConfig;
3031
import com.fasterxml.jackson.databind.DeserializationContext;
3132
import com.fasterxml.jackson.databind.JavaType;
@@ -46,9 +47,6 @@
4647
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
4748
import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
4849
import com.fasterxml.jackson.databind.type.TypeFactory;
49-
import static org.junit.Assert.assertEquals;
50-
import static org.junit.Assert.assertFalse;
51-
import static org.junit.Assert.assertTrue;
5250
import org.junit.Before;
5351
import org.junit.Test;
5452

@@ -57,6 +55,8 @@
5755
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
5856
import org.springframework.beans.factory.support.RootBeanDefinition;
5957

58+
import static org.junit.Assert.*;
59+
6060
/**
6161
* Test class for {@link SpringHandlerInstantiatorTests}.
6262
*
@@ -65,8 +65,10 @@
6565
public class SpringHandlerInstantiatorTests {
6666

6767
private SpringHandlerInstantiator instantiator;
68+
6869
private ObjectMapper objectMapper;
6970

71+
7072
@Before
7173
public void setup() {
7274
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
@@ -78,6 +80,7 @@ public void setup() {
7880
objectMapper = Jackson2ObjectMapperBuilder.json().handlerInstantiator(instantiator).build();
7981
}
8082

83+
8184
@Test
8285
public void autowiredSerializer() throws JsonProcessingException {
8386
User user = new User("bob");
@@ -113,6 +116,7 @@ public void applicationContextAwareTypeIdResolver() throws JsonProcessingExcepti
113116
assertTrue(CustomTypeIdResolver.isAutowiredFiledInitialized);
114117
}
115118

119+
116120
public static class UserDeserializer extends JsonDeserializer<User> {
117121

118122
@Autowired
@@ -124,9 +128,9 @@ public User deserialize(JsonParser jsonParser, DeserializationContext deserializ
124128
JsonNode node = oc.readTree(jsonParser);
125129
return new User(this.capitalizer.capitalize(node.get("username").asText()));
126130
}
127-
128131
}
129132

133+
130134
public static class UserSerializer extends JsonSerializer<User> {
131135

132136
@Autowired
@@ -140,6 +144,7 @@ public void serialize(User user, JsonGenerator jsonGenerator, SerializerProvider
140144
}
141145
}
142146

147+
143148
public static class UpperCaseKeyDeserializer extends KeyDeserializer {
144149

145150
@Autowired
@@ -151,6 +156,7 @@ public Object deserializeKey(String key, DeserializationContext context) throws
151156
}
152157
}
153158

159+
154160
public static class CustomTypeResolverBuilder extends StdTypeResolverBuilder {
155161

156162
@Autowired
@@ -170,6 +176,7 @@ public TypeDeserializer buildTypeDeserializer(DeserializationConfig config, Java
170176
}
171177
}
172178

179+
173180
public static class CustomTypeIdResolver implements TypeIdResolver {
174181

175182
@Autowired
@@ -178,7 +185,6 @@ public static class CustomTypeIdResolver implements TypeIdResolver {
178185
public static boolean isAutowiredFiledInitialized = false;
179186

180187
public CustomTypeIdResolver() {
181-
182188
}
183189

184190
@Override
@@ -204,15 +210,20 @@ public String idFromValue(Object value) {
204210

205211
@Override
206212
public void init(JavaType type) {
207-
208213
}
209214

210215
@Override
211216
public String idFromBaseType() {
212217
return null;
213218
}
219+
220+
// New in Jackson 2.5
221+
public JavaType typeFromId(DatabindContext context, String id) {
222+
return null;
223+
}
214224
}
215225

226+
216227
@JsonDeserialize(using = UserDeserializer.class)
217228
@JsonSerialize(using = UserSerializer.class)
218229
public static class User {
@@ -229,6 +240,7 @@ public User(String username) {
229240
public String getUsername() { return this.username; }
230241
}
231242

243+
232244
public static class SecurityRegistry {
233245

234246
@JsonDeserialize(keyUsing = UpperCaseKeyDeserializer.class)
@@ -243,6 +255,7 @@ public Map<String, String> getCredentials() {
243255
}
244256
}
245257

258+
246259
@JsonTypeInfo(use = JsonTypeInfo.Id.CUSTOM, property = "type")
247260
@JsonTypeResolver(CustomTypeResolverBuilder.class)
248261
@JsonTypeIdResolver(CustomTypeIdResolver.class)
@@ -255,18 +268,19 @@ public Group(String name) {
255268
}
256269

257270
public Group() {
258-
259271
}
260272

261273
public String getType() {
262274
return Group.class.getName();
263275
}
264276
}
265277

278+
266279
public static class Capitalizer {
267280

268281
public String capitalize(String text) {
269282
return text.toUpperCase();
270283
}
271284
}
285+
272286
}

0 commit comments

Comments
 (0)