我正在尝试从spring-cloud-aws-messaging
实例化一个解析器,特别是NotificationMessageArgumentResolver
。问题是它需要MessageConvertor
作为参数。所以,这就是我到目前为止所做的:
private NotificationMessageArgumentResolver notificationMessageArgumentResolver() {
new NotificationMessageArgumentResolver(this.messageConvertor);
}
要获得messageConvertor
,我尝试过:
@Autowired
public MvcConfig(MessageConvertor messageConvertor) {}
@Autowired
public MvcConfig(MappingJackson2MessageConverter messageConvertor) {}
但是我以no bean found
的方式得到同样的错误。文档只是要求使用XML:
<mvc:annotation-driven>
<mvc:argument-resolvers>
<ref bean="notificationResolver" />
</mvc:argument-resolvers>
<aws-messaging:notification-argument-resolver id="notificationResolver" />
根据文件
注册三个参数解析器:
NotificationStatusHandlerMethodArgumentResolver
,NotificationMessageHandlerMethodArgumentResolver
和NotificationSubjectHandlerMethodArgumentResolver
。
所以,根据How to use argument-resolvers using annotation in Spring boot?的回答,我可以添加3个bean中的2个,因为他们不需要任何我无法访问的bean,但是我无法实例化{{ 1}}由于缺少NotificationMessageArgumentResolver
。我希望我的所有消息都纯粹是用JSON编写的,所以我确切地知道要使用哪个MessageConvertor
,这是Spring Boot附带的JSON的默认消息。
修改
整个文件,如果有人感兴趣:http://pastebin.com/tM471AEv
答案 0 :(得分:1)
我想知道你是否真的需要NotificationMessageArgumentResolver
,因为它是在使用消息时使用的。如您所见,它实现了HandlerMethodArgumentResolver
包中的org.springframework.messaging
。
我怀疑您想要使用NotificationMessageHandlerMethodArgumentResolver
。哪个是HandlerMethodArgumentResolver
用于Web而不是消息传递。使用<aws-messaging:notification-argument-resolver id="notificationResolver" />
我还建议使用NotificationHandlerMethodArgumentResolverFactoryBean
而不是3个单独的bean,因为它也是命名空间和注释驱动配置在内部使用的类。
您的配置看起来像这样。
@Bean
public NotificationHandlerMethodArgumentResolverFactoryBean notificationHandlerMethodArgumentResolverFactoryBean() {
return new NotificationHandlerMethodArgumentResolverFactoryBean();
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(notificationHandlerMethodArgumentResolverFactoryBean.getObject());
}