自动检测Jackson for Spring

Tom*_*Tom 1 java spring spring-mvc jackson

我正在开发一个使用Spring框架和Jackson的项目.但是,我无法找到一个插入的地方.我查看了Web上的许多示例,其中大多数使用类的bean org.springframework.http.converter.json.MappingJacksonHttpMessageConverter来允许反序列化@ResponseBody.所以,我无法找到任何引用MappingJacksonHttpMessageConverter.

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

如何启用杰克逊的其他方式是什么?

was*_*ren 5

如果您在使用线了你的春天项目@EnableWebMvc通过使用标签或通过XML <mvc:annotation-driven />启用了一堆功能.您可以阅读原始Spring文档中的详细功能列表.

启用的功能之一是支持@RequestBody方法参数和@ResponseBody方法返回值.这是通过HttpMessageConverter组件完成的,并且为使用@RequestMapping或注释的方法启用了该功能@ExceptionHandler.

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

  • ByteArrayHttpMessageConverter 转换字节数组.
  • StringHttpMessageConverter 转换字符串.
  • ResourceHttpMessageConverter转换为/来自org.springframework.core.io.Resource所有媒体类型.
  • SourceHttpMessageConverter转换为/从javax.xml.transform.Source.
  • FormHttpMessageConverter 将表单数据转换为MultiValueMap或从MultiValueMap转换.
  • Jaxb2RootElementHttpMessageConverter 将Java对象转换为XML或从XML转换 - 如果类路径中存在JAXB2,则添加.
  • MappingJackson2HttpMessageConverter(或MappingJacksonHttpMessageConverter)转换为/来自JSON - 如果类别路径中存在杰克逊2(或杰克逊),则添加.
  • AtomFeedHttpMessageConverter 转换Atom提要 - 如果类路径中存在Rome,则添加.
  • RssChannelHttpMessageConverter 转换RSS提要 - 如果类路径中存在罗马则添加.

所以,如果你有一个支持Web杰克逊可用的项目在classpath中,Spring会自动从被标注了一个控制器方法转换返回值@ResponseBody(如果客户机调用接受JSON是这意味着接受头部通常必须设定to application/json).

如果您希望覆盖HttpMessageConverters,则可以实现以下内容:

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

            // Do your magic, override your stuff
        }
}
Run Code Online (Sandbox Code Playgroud)

有关如何自定义例如杰克逊转换器一个很好的介绍,你可以阅读这篇文章从DZone约定制与Spring引导和Spring MVC HttpMessageConverters.