1
1
/*
2
- * Copyright 2002-2014 the original author or authors.
2
+ * Copyright 2002-2016 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
16
16
17
17
package org .springframework .http .converter .json ;
18
18
19
+ import com .fasterxml .jackson .annotation .ObjectIdGenerator ;
20
+ import com .fasterxml .jackson .annotation .ObjectIdResolver ;
19
21
import com .fasterxml .jackson .databind .DeserializationConfig ;
20
22
import com .fasterxml .jackson .databind .JsonDeserializer ;
21
23
import com .fasterxml .jackson .databind .JsonSerializer ;
22
24
import com .fasterxml .jackson .databind .KeyDeserializer ;
25
+ import com .fasterxml .jackson .databind .PropertyNamingStrategy ;
23
26
import com .fasterxml .jackson .databind .SerializationConfig ;
24
27
import com .fasterxml .jackson .databind .cfg .HandlerInstantiator ;
25
28
import com .fasterxml .jackson .databind .cfg .MapperConfig ;
29
+ import com .fasterxml .jackson .databind .deser .ValueInstantiator ;
26
30
import com .fasterxml .jackson .databind .introspect .Annotated ;
27
31
import com .fasterxml .jackson .databind .jsontype .TypeIdResolver ;
28
32
import com .fasterxml .jackson .databind .jsontype .TypeResolverBuilder ;
33
+ import com .fasterxml .jackson .databind .ser .VirtualBeanPropertyWriter ;
34
+ import com .fasterxml .jackson .databind .util .Converter ;
29
35
30
36
import org .springframework .beans .factory .config .AutowireCapableBeanFactory ;
31
37
import org .springframework .context .ApplicationContext ;
32
38
import org .springframework .util .Assert ;
33
39
34
40
/**
35
- * Eventually get Jackson handler ({@link JsonSerializer}, {@link JsonDeserializer},
36
- * {@link KeyDeserializer}, {@link TypeResolverBuilder}, {@link TypeIdResolver}) beans by
37
- * type from Spring {@link ApplicationContext}. If no bean is found, the default behavior
38
- * happen (calling no-argument constructor via reflection).
41
+ * Allows for creating Jackson ({@link JsonSerializer}, {@link JsonDeserializer},
42
+ * {@link KeyDeserializer}, {@link TypeResolverBuilder}, {@link TypeIdResolver})
43
+ * beans with autowiring against a Spring {@link ApplicationContext}.
44
+ *
45
+ * <p>As of Spring 4.3, this overrides all factory methods in {@link HandlerInstantiator},
46
+ * including non-abstract ones and recently introduced ones from Jackson 2.4 and 2.5:
47
+ * for {@link ValueInstantiator}, {@link ObjectIdGenerator}, {@link ObjectIdResolver},
48
+ * {@link PropertyNamingStrategy}, {@link Converter}, {@link VirtualBeanPropertyWriter}.
39
49
*
40
- * @since 4.1.3
41
50
* @author Sebastien Deleuze
51
+ * @author Juergen Hoeller
52
+ * @since 4.1.3
42
53
* @see Jackson2ObjectMapperBuilder#handlerInstantiator(HandlerInstantiator)
54
+ * @see ApplicationContext#getAutowireCapableBeanFactory()
43
55
* @see HandlerInstantiator
44
56
*/
45
57
public class SpringHandlerInstantiator extends HandlerInstantiator {
@@ -56,33 +68,66 @@ public SpringHandlerInstantiator(AutowireCapableBeanFactory beanFactory) {
56
68
this .beanFactory = beanFactory ;
57
69
}
58
70
71
+
72
+ @ Override
73
+ public JsonDeserializer <?> deserializerInstance (DeserializationConfig config , Annotated annotated , Class <?> implClass ) {
74
+ return (JsonDeserializer <?>) this .beanFactory .createBean (implClass );
75
+ }
76
+
77
+ @ Override
78
+ public KeyDeserializer keyDeserializerInstance (DeserializationConfig config , Annotated annotated , Class <?> implClass ) {
79
+ return (KeyDeserializer ) this .beanFactory .createBean (implClass );
80
+ }
81
+
59
82
@ Override
60
- public JsonSerializer <?> serializerInstance (SerializationConfig config ,
61
- Annotated annotated , Class <?> keyDeserClass ) {
62
- return (JsonSerializer <?>) this .beanFactory .createBean (keyDeserClass );
83
+ public JsonSerializer <?> serializerInstance (SerializationConfig config , Annotated annotated , Class <?> implClass ) {
84
+ return (JsonSerializer <?>) this .beanFactory .createBean (implClass );
63
85
}
64
86
65
87
@ Override
66
- public JsonDeserializer <?> deserializerInstance (DeserializationConfig config ,
67
- Annotated annotated , Class <?> deserClass ) {
68
- return (JsonDeserializer <?>) this .beanFactory .createBean (deserClass );
88
+ public TypeResolverBuilder <?> typeResolverBuilderInstance (MapperConfig <?> config , Annotated annotated , Class <?> implClass ) {
89
+ return (TypeResolverBuilder <?>) this .beanFactory .createBean (implClass );
69
90
}
70
91
71
92
@ Override
72
- public KeyDeserializer keyDeserializerInstance (DeserializationConfig config ,
73
- Annotated annotated , Class <?> serClass ) {
74
- return (KeyDeserializer ) this .beanFactory .createBean (serClass );
93
+ public TypeIdResolver typeIdResolverInstance (MapperConfig <?> config , Annotated annotated , Class <?> implClass ) {
94
+ return (TypeIdResolver ) this .beanFactory .createBean (implClass );
75
95
}
76
96
97
+ /** @since 4.3 */
77
98
@ Override
78
- public TypeResolverBuilder <?> typeResolverBuilderInstance (MapperConfig <?> config ,
79
- Annotated annotated , Class <?> resolverClass ) {
80
- return (TypeResolverBuilder <?>) this .beanFactory .createBean (resolverClass );
99
+ public ValueInstantiator valueInstantiatorInstance (MapperConfig <?> config , Annotated annotated , Class <?> implClass ) {
100
+ return (ValueInstantiator ) this .beanFactory .createBean (implClass );
81
101
}
82
102
103
+ /** @since 4.3 */
83
104
@ Override
84
- public TypeIdResolver typeIdResolverInstance (MapperConfig <?> config ,
85
- Annotated annotated , Class <?> resolverClass ) {
86
- return (TypeIdResolver ) this .beanFactory .createBean (resolverClass );
105
+ public ObjectIdGenerator <?> objectIdGeneratorInstance (MapperConfig <?> config , Annotated annotated , Class <?> implClass ) {
106
+ return (ObjectIdGenerator <?>) this .beanFactory .createBean (implClass );
87
107
}
108
+
109
+ /** @since 4.3 */
110
+ @ Override
111
+ public ObjectIdResolver resolverIdGeneratorInstance (MapperConfig <?> config , Annotated annotated , Class <?> implClass ) {
112
+ return (ObjectIdResolver ) this .beanFactory .createBean (implClass );
113
+ }
114
+
115
+ /** @since 4.3 */
116
+ @ Override
117
+ public PropertyNamingStrategy namingStrategyInstance (MapperConfig <?> config , Annotated annotated , Class <?> implClass ) {
118
+ return (PropertyNamingStrategy ) this .beanFactory .createBean (implClass );
119
+ }
120
+
121
+ /** @since 4.3 */
122
+ @ Override
123
+ public Converter <?, ?> converterInstance (MapperConfig <?> config , Annotated annotated , Class <?> implClass ) {
124
+ return (Converter <?, ?>) this .beanFactory .createBean (implClass );
125
+ }
126
+
127
+ /** @since 4.3 */
128
+ @ Override
129
+ public VirtualBeanPropertyWriter virtualPropertyWriterInstance (MapperConfig <?> config , Class <?> implClass ) {
130
+ return (VirtualBeanPropertyWriter ) this .beanFactory .createBean (implClass );
131
+ }
132
+
88
133
}
0 commit comments