Spring 的自动检测 Jackson

Auto detection Jackson for Spring

我正在开发一个使用 Spring 框架和 Jackson 的项目。但是,我无法找到它被堵塞的地方。我在网上看了很多例子,其中大多数使用 class org.springframework.http.converter.json.MappingJacksonHttpMessageConverter 的 bean 来允许 @ResponseBody 的反序列化。 所以,我找不到任何对 MappingJacksonHttpMessageConverter.

的引用

我的问题:如果 spring 框架在其 class 路径上找到它以将 JSON 转换为 @ResponseBody 对象,它会自动使用 Jackson 吗?

还有哪些其他方式可以启用 Jackson?

如果您使用 @EnableWebMvc 或通过 XML 使用标签 <mvc:annotation-driven /> 连接您的 spring 项目,您将启用一系列功能。您可以在 original Spring docs 中阅读详细的功能列表。

启用的功能之一是支持 @RequestBody 方法参数和 @ResponseBody 方法 return 值。这是通过 HttpMessageConverter 组件完成的,并且为使用 @RequestMapping@ExceptionHandler.

注释的方法启用该功能

以下列出了默认注册的转换器:

  • ByteArrayHttpMessageConverter 转换字节数组。
  • StringHttpMessageConverter 转换字符串。
  • ResourceHttpMessageConverter 为所有媒体类型转换 to/from org.springframework.core.io.Resource
  • SourceHttpMessageConverter 将 to/from 转换为 javax.xml.transform.Source.
  • FormHttpMessageConverter 将表单数据 to/from 转换为 MultiValueMap。
  • Jaxb2RootElementHttpMessageConverter 转换 Java objects to/from XML — 如果类路径上存在 JAXB2,则添加。
  • MappingJackson2HttpMessageConverter(或 MappingJacksonHttpMessageConverter)转换 to/from JSON — 如果类路径中存在 Jackson 2(或 Jackson),则添加。
  • AtomFeedHttpMessageConverter 转换 Atom 提要 — 如果类路径中存在 Rome,则添加。
  • RssChannelHttpMessageConverter 转换 RSS 提要 — 如果类路径中存在 Rome,则添加。

因此,如果您有一个 web enabled 项目并且类路径上有可用的 Jackson,Spring 将自动从 [=74] 转换 return 值=] 用 @ResponseBody 注释(如果客户端调用者接受 JSON 这意味着接受 header 通常必须设置为 application/json)。

如果您希望覆盖 HttpMessageConverter,您可以执行以下操作:

@Configuration
@EnableWebMvc
public class YourConfiguration extends WebMvcConfigurerAdapter {
    @Override
        public void configureMessageConverters(
                List<HttpMessageConverter<?>> converters) {

            // Do your magic, override your stuff
        }
}

有关如何自定义的详细介绍,例如您可以阅读 this article from DZone about Customizing HttpMessageConverters with Spring Boot and Spring MVC.

的 Jackson 转换器