View Javadoc
1   package top.infra.jackson2;
2   
3   import static com.google.common.collect.Lists.newLinkedList;
4   
5   import com.fasterxml.jackson.databind.Module;
6   
7   import org.springframework.core.Ordered;
8   import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
9   
10  import java.lang.reflect.Field;
11  import java.util.List;
12  
13  /**
14   * Created by zhanghaolun on 16/7/28.
15   */
16  public interface Jackson2BuilderCustomizer extends Ordered {
17  
18      void customize(Jackson2Properties properties, Jackson2ObjectMapperBuilder builder);
19  
20      default boolean createXmlMapper(final Jackson2ObjectMapperBuilder builder) {
21          try {
22              final boolean result;
23              final Field fieldModules = builder.getClass().getDeclaredField("createXmlMapper");
24              fieldModules.setAccessible(true);
25              result = (boolean) fieldModules.get(builder);
26              return result;
27          } catch (final NoSuchFieldException | IllegalAccessException | IllegalArgumentException ex) {
28              return false;
29          }
30      }
31  
32      default Boolean isXmlMapper(final Jackson2ObjectMapperBuilder builder) {
33          return this.createXmlMapper(builder);
34      }
35  
36      default ClassLoader moduleClassLoader(final Jackson2ObjectMapperBuilder builder) {
37          try {
38              final ClassLoader result;
39              final Field fieldModuleClassLoader = builder.getClass().getDeclaredField("moduleClassLoader");
40              fieldModuleClassLoader.setAccessible(true);
41              result = (ClassLoader) fieldModuleClassLoader.get(builder);
42              return result;
43          } catch (final NoSuchFieldException | IllegalAccessException | IllegalArgumentException ex) {
44              return builder.getClass().getClassLoader();
45          }
46      }
47  
48      @SuppressWarnings("unchecked")
49      default List<Module> modules(final Jackson2ObjectMapperBuilder builder) {
50          try {
51              final List<Module> result;
52              final Field fieldModules = builder.getClass().getDeclaredField("modules");
53              fieldModules.setAccessible(true);
54              result = (List<Module>) fieldModules.get(builder);
55              return newLinkedList(result);
56          } catch (final NoSuchFieldException | IllegalAccessException | IllegalArgumentException ex) {
57              return newLinkedList();
58          }
59      }
60  }