1 package top.infra.jackson2;
2
3 import java.util.Collection;
4 import java.util.Optional;
5
6 import top.infra.common.ClassUtils;
7
8 public interface Jackson2MapperCustomizerFactory {
9
10 String CLASS_JACKSON2_OBJECT_MAPPER_BUILDER = "org.springframework.http.converter.json.Jackson2ObjectMapperBuilder";
11
12 Optional<Jackson2MapperCustomizer> getObject();
13
14 default Optional<Jackson2MapperCustomizer> newInstanceIfPresent(
15 final String customizerClass, final Collection<String> classesMustPresent) {
16 try {
17 final Optional<Jackson2MapperCustomizer> customizer;
18
19 if (ClassUtils.isPresent(customizerClass) && classesMustPresent.stream().allMatch(ClassUtils::isPresent)) {
20 final Optional<Class<?>> classOptional = ClassUtils.forName(customizerClass);
21 if (classOptional.isPresent()) {
22 customizer = Optional.of((Jackson2MapperCustomizer) classOptional.get().newInstance());
23 } else {
24 customizer = Optional.empty();
25 }
26 } else {
27 customizer = Optional.empty();
28 }
29
30 return customizer;
31 } catch (final ReflectiveOperationException ex) {
32 return Optional.empty();
33 }
34 }
35 }