1
1
package com .fasterxml .jackson .datatype .guava ;
2
2
3
+ import com .fasterxml .jackson .databind .ser .std .IterableSerializer ;
4
+ import com .fasterxml .jackson .databind .ser .std .StdDelegatingSerializer ;
5
+ import com .fasterxml .jackson .databind .type .TypeFactory ;
6
+ import com .fasterxml .jackson .databind .util .Converter ;
7
+ import com .fasterxml .jackson .databind .util .StdConverter ;
3
8
import com .google .common .base .Optional ;
4
9
import com .google .common .cache .CacheBuilder ;
5
10
import com .google .common .cache .CacheBuilderSpec ;
11
+ import com .google .common .collect .FluentIterable ;
6
12
import com .google .common .collect .Multimap ;
7
13
import com .google .common .collect .Range ;
8
14
import com .google .common .net .HostAndPort ;
16
22
import com .fasterxml .jackson .datatype .guava .ser .MultimapSerializer ;
17
23
import com .fasterxml .jackson .datatype .guava .ser .RangeSerializer ;
18
24
25
+ import java .util .Iterator ;
26
+
19
27
public class GuavaSerializers extends Serializers .Base
20
28
{
29
+ static class FluentConverter extends StdConverter <Object ,Iterable <?>> {
30
+ static final FluentConverter instance = new FluentConverter ();
31
+
32
+ @ Override
33
+ public Iterable <?> convert (Object value ) {
34
+ return (Iterable <?>) value ;
35
+ }
36
+ }
37
+
21
38
@ Override
22
39
public JsonSerializer <?> findSerializer (SerializationConfig config , JavaType type , BeanDescription beanDesc )
23
40
{
@@ -40,6 +57,14 @@ public JsonSerializer<?> findSerializer(SerializationConfig config, JavaType typ
40
57
if (CacheBuilderSpec .class .isAssignableFrom (raw ) || CacheBuilder .class .isAssignableFrom (raw )) {
41
58
return ToStringSerializer .instance ;
42
59
}
60
+ // since 2.4.5
61
+ if (FluentIterable .class .isAssignableFrom (raw )) {
62
+ JavaType [] params = config .getTypeFactory ().findTypeParameters (type , Iterable .class );
63
+ JavaType vt = (params == null || params .length != 1 ) ?
64
+ TypeFactory .unknownType () : params [0 ];
65
+ JavaType delegate = config .getTypeFactory ().constructParametricType (Iterable .class , vt );
66
+ return new StdDelegatingSerializer (FluentConverter .instance , delegate , null );
67
+ }
43
68
return super .findSerializer (config , type , beanDesc );
44
69
}
45
70
0 commit comments