Spring文档说Jackson 2 API应该存在于MappingJackson2HttpMessageConverter的类路径中。
在MappingJackson2HttpMessageConverter的源代码中,Spring从jackson API导入类。
31 - > import com.fasterxml.jackson.core.JsonEncoding;
32 - > import com.fasterxml.jackson.core.JsonGenerator;
33 - > import com.fasterxml.jackson.databind.JavaType;
34 - > import com.fasterxml.jackson.databind.ObjectMapper;
现在我的问题是,如果类路径中没有JACKSON,那么MappingJackson2HttpMessageConverter中的上述代码应该抛出编译时错误。但为什么这个类没有任何编译错误。
答案 0 :(得分:3)
首先,Spring使用反射来确定Jackson库是否在类路径上。您可以在WebMvcConfigurationSupport中看到这一点:
private static final boolean jackson2Present =
ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper",
WebMvcConfigurationSupport.class.getClassLoader()) &&
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator",
WebMvcConfigurationSupport.class.getClassLoader());
现在WebMvcConfigurationSupport
本身也有以下内容:import com.fasterxml.jackson.databind.ObjectMapper;
。
但有两件事情在这里发挥作用:
同样的限制适用于Spring 4.x,因为它支持JDK8,同时仍然在使用JDK6 +。请参阅this blog post for more details。