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 转换器
我正在开发一个使用 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/fromorg.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 转换器