Spring 4.1示例化了一个Jackson的ObjectMapper示例,我有理由将这个示例@Autowire到我的一个控制器中:控制器使用Jackson自己做一些小的JSON解析,但是它使用的ObjectMapper应该是Spring本身正在使用的同一个示例。 请注意,我不是在问如何自定义配置Spring使用的ObjectMapper;我对默认值很满意,我只想找到Spring out使用的示例,这样我就可以在自己的代码中重用现有的示例。
当您尝试 @autowired MappingJackson 2 HttpMessageConverter时,它会提供:No qualifying bean of type 'org.springframework.http.converter.json.MappingJackson2HttpMessageConverter' available: expected single matching bean but found 4: mappingJackson2HttpMessageConverter,jacksonHttpMessageConverter,halJacksonHttpMessageConverter,alpsJsonHttpMessageConverter . 这不是一个大问题,您可以将变量名更改为上述名称之一,以获得该示例:@Autowired private MappingJackson2HttpMessageConverter halJacksonHttpMessageConverter;个
8条答案
按热度按时间qlckcl4x1#
如果您在类路径上使用Spring Boot和Jackson,并在REST控制器中使用JSON解析的默认实现,那么应该可以这样做:
lsmepo6l2#
正如其他人所说,你不能直接将它
@Autowired
到你的控制器中。@Emerson Farrugia建议使用以下内容创建新示例
我也不满意,因为获得的示例没有遵循
spring.jackson.*
配置属性,而我需要它。我找到的解决方案是从Spring的
MappingJackson2HttpMessageConverter
获得ObjectMapper,它是可注入的。所以我自动连线:
然后像这样从中获取ObjectMapper:
这个示例的行为与SpringMVC自己的消息转换完全一样--它可能 * 是 * 同一个示例。
eqfvzcg83#
如果你看一下
MappingJackson2HttpMessageConverter
,你会发现它创建了一个新的ObjectMapper
,但是没有把它公开为bean。这里有一个getter,但是我过去唯一的方法是在我自己创建MappingJackson2HttpMessageConverter
的时候,例如。如果您使用的是Spring Boot,手册中有一节专门介绍如何使用
ObjectMapper
。如果您创建了默认的Jackson2ObjectMapperBuilder
@Bean
,您应该能够在控制器中自动连接相同的ObjectMapper
示例。pdtvr36n4#
ObjectMapper
是由Jackson2ObjectMapperBuilder
创建的,您可以使用以下方法注入构建器:然后使用
mapperBuilder.build()
构建一个ObjectMapper
示例,这个示例可以使用application.properties
中的配置。kcugc4gi5#
我已经调试了Spring Boot的源代码,发现只有当我们启动整个上下文
Jackson2ObjectMapperBuilder
时,application.yml
才会包含我们放在application.yml
中的配置。这意味着,如果我们想在Spring Boot测试中使用JUnit 5生成ObjectMapper,我们必须:
我们不能只使用
@SpringBootTest(classes = Jackson2ObjectMapperBuilder.class)
来生成此构建器。当我们
bootRun
时,我们没有这个问题。该配置在
Jackson2ObjectMapperBuilderCustomizerConfiguration#customize(Jackson2ObjectMapperBuilder builder)
方法中设置。ygya80vv6#
当您尝试 @autowired MappingJackson 2 HttpMessageConverter时,它会提供:
No qualifying bean of type 'org.springframework.http.converter.json.MappingJackson2HttpMessageConverter' available: expected single matching bean but found 4: mappingJackson2HttpMessageConverter,jacksonHttpMessageConverter,halJacksonHttpMessageConverter,alpsJsonHttpMessageConverter
.这不是一个大问题,您可以将变量名更改为上述名称之一,以获得该示例:
@Autowired private MappingJackson2HttpMessageConverter halJacksonHttpMessageConverter;
个0tdrvxhp7#
Spring 4.3的更新:
jogvjijk8#
如果你愿意的话,两步走;
1.在您的
@SpringBootApplication
类中,添加:1.在任何您希望使用
ObjectMapper
的地方:安静!