2017-04-12 92 views
5

我曾嘗試這種解決方案在下面的問題中發現,但沒有工作在我的情況:不能自動裝配一個Bean是存在於依賴JAR

@Configuration 
@EnableWebMvc 
@ComponentScan("myapp.framework.export") 
public class WebConfig extends MyAppWebConfig { 

    @Override 
    public void configureContentNegotiation(final ContentNegotiationConfigurer configurer) { 

     super.configureContentNegotiation(configurer); 

    } 

    @Override 
    public void configureMessageConverters(final List<HttpMessageConverter<?>> converters) { 

     super.configureMessageConverters(converters); 

    } 

} 

錯誤:

INFO: Initializing Spring FrameworkServlet 'services-rest' 
2017-04-11 15:25:52,774|localhost-startStop-1|NO_TID|NO_USER|ERROR|org.springframework.web.servlet.DispatcherServlet.initServletBean|Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xlsHttpMessageConverter': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'myapp.framework.export.ExportXlsModelService<?>[]' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)} 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1041) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4969) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'myapp.framework.export.ExportXlsModelService<?>[]' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:518) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:627) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318) 
    ... 29 common frames omitted 

Apr 11, 2017 3:25:52 PM org.apache.catalina.core.ApplicationContext log 
SEVERE: StandardWrapper.Throwable 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xlsHttpMessageConverter': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'myapp.framework.export.ExportXlsModelService<?>[]' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)} 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1041) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4969) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'myapp.framework.export.ExportXlsModelService<?>[]' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:518) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:627) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318) 
    ... 29 more 

Apr 11, 2017 3:25:52 PM org.apache.catalina.core.StandardContext loadOnStartup 
SEVERE: Servlet /myapp threw load() exception 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'myapp.framework.export.ExportXlsModelService<?>[]' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:518) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:627) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1041) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4969) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Apr 11, 2017 3:25:52 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-nio-8080"] 
Apr 11, 2017 3:25:52 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-nio-8009"] 
Apr 11, 2017 3:25:52 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 10565 ms 

xlsHttpMessageConverter:

package myapp.framework.web.converter; 

import myapp.framework.export.ExportXlsModelService; 

import java.io.IOException; 
import java.io.OutputStream; 

import javax.annotation.Resource; 

import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.springframework.http.converter.HttpMessageNotWritableException; 
import org.springframework.stereotype.Service; 
    @Service 
    public class XlsHttpMessageConverter<T> extends 
       AbstractMyAppHttpMessageConverter<T, ExportXlsModelService<T>> { 

     @Resource 
     private ExportXlsModelService<T>[] exportServices; 

     public XlsHttpMessageConverter() { 

      super(MyAppMediaType.APPLICATION_EXCEL); 
     } 

     @Override 
     protected void ecrireFichier(final T toExport, final OutputStream os) throws IOException, 
      HttpMessageNotWritableException { 

      final ExportXlsModelService<T> exportService = getServiceExport(toExport); 

      final HSSFWorkbook model = exportService.construireXlsModel(toExport); 
      model.write(os); 
     } 

     @Override 
     protected ExportXlsModelService<T>[] getServicesExport() { 

      return exportServices; 
     } 

    } 
+0

發佈'xlsHttpMessageConverter' bean代碼。問題在那裏。 – Strelok

+0

@Strelok我有Post xlsHttpMessageConverter bean代碼。 – Mercer

+0

你可以嘗試並將該字段更改爲列表而不是數組,並查看是否有效? – Strelok

回答

5

嘗試將classpath*: Prefix添加到您的掃描。 (讀here

*手段掃描所有罐子上的classpath

UPDATE:

你的轉換器包myapp.framework.web.converter但掃描檢查myapp.framework.export

+0

我必須嘗試添加'classpath *:'我有同樣的問題 – Mercer

+0

您的組件掃描找不到它,因爲它正在按照建議掃描錯誤的軟件包。軟件包myapp.framework.web.converter不在myapp.framework.export的層次結構中。 –

1

我認爲有問題的自動裝配爲通用類。 我們必須在自動裝配時指定特定的類型。

按參考可能是有用的:

  1. Reference1
  2. Reference2
1

你不能有一個@Service具有類型參數T,怎麼會知道春天什麼T應該是當它實例化bean。

如果你有5個不同的XlsHttpMessageConverter<T>,你必須聲明5個豆。不幸的是,即使將每個轉換器定義爲單獨的bean,Spring也無法知道要注入哪個ExportXlsModelService<T>[] exportServices;,因爲無論類型參數如何(參見下面的編輯),它都會將所有ExportXlsModelService視爲候選者。

然而,可以將一個特定類型的bean注入到@Bean方法中,因此下面的示例可以工作(但對於大量類型來說非常不切實際)。

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 

import java.util.List; 

import static org.junit.Assert.assertNotNull; 

@Configuration 
public class MyConfig { 

    public static void main(String[] args) { 

     AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyConfig.class); 

     ConverterInjectionTarget bean = ctx.getBean(ConverterInjectionTarget.class); 
     System.out.println("injected Converters = " + bean.converters.size()); 
     for (XlsHttpMessageConverter converter : bean.converters) { 
      assertNotNull(converter.value); 
     } 
    } 

    // correct version of generic bean can be autowired into @Bean method 
    @Bean 
    XlsHttpMessageConverter integerConverter(Injectable<Integer> value) { 
     return new XlsHttpMessageConverter<>(value); 
    } 

    @Bean 
    XlsHttpMessageConverter StringConverter(Injectable<String> value) { 
     return new XlsHttpMessageConverter<String>(value); 
    } 

    @Bean 
    Injectable<Integer> integerDummyBean() { 
     return new Injectable<>(1); 
    } 

    @Bean 
    Injectable<String> stringDummyBean() { 
     return new Injectable<>("hello"); 
    } 

    @Bean 
    ConverterInjectionTarget myBean() { 
     return new ConverterInjectionTarget(); 
    } 

    static class XlsHttpMessageConverter<T> { 
     // impossible to autowire this, it has to be set through the constructor 
     final Injectable<T> value; 

     XlsHttpMessageConverter(Injectable<T> value) { 
      this.value = value; 
     } 
    } 

    static class ConverterInjectionTarget { 
     @Autowired 
     List<XlsHttpMessageConverter> converters; 
    } 

    class Injectable<T> { 
     final T value; 

     Injectable(T value) { 
      this.value = value; 
     } 
    } 
} 

如果修改的例子,並嘗試將自動裝配進入InjectableXlsHttpMessageConverter將看到它失敗。

最好的解決辦法可以是創建一個BeanFactoryPostProcessor將編程創建所有ExportXlsModelService實例,並提供它們作爲輸入到XlsHttpMessageConverter實例,然後將其註冊爲單身。

編輯 有一件事我沒有提到,就是它可以自動裝配一個泛型類型,但它要求bean被定義爲一個具體類(不使用@Bean方法),所以下面將也可以工作(多個文件)。

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 

import java.util.List; 

import static org.junit.Assert.assertNotNull; 

@Configuration 
@ComponentScan("myPackage") 
public class MyConfig { 

    public static void main(String[] args) { 

     AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyConfig.class); 

     ConverterInjectionTarget bean = ctx.getBean(ConverterInjectionTarget.class); 
     System.out.println("injected Converters = " + bean.converters.size()); 
     for (XlsHttpMessageConverter converter : bean.converters) { 
      assertNotNull(converter.value); 
     } 
    } 

    @Bean 
    Injectable<Integer> integerDummyBean() { 
     return new Injectable<>(1); 
    } 

    @Bean 
    Injectable<String> stringDummyBean() { 
     return new Injectable<>("hello"); 
    } 

    @Bean 
    ConverterInjectionTarget myBean() { 
     return new ConverterInjectionTarget(); 
    } 

    static class ConverterInjectionTarget { 
     @Autowired 
     List<XlsHttpMessageConverter> converters; 
    } 

    static class Injectable<T> { 
     final T value; 

     Injectable(T value) { 
      this.value = value; 
     } 
    } 
} 

abstract class XlsHttpMessageConverter<T> { 
    // this is possible to autowire because we have a concrete class that spring can read the bytecode from. 
    @Autowired 
    MyConfig.Injectable<T> value; 
} 

@Service 
public class IntegerXlsHttpMessageConverter<T> extends XlsHttpMessageConverter<Integer> { 
} 

@Service 
public class StringXlsHttpMessageConverter extends XlsHttpMessageConverter<String> { 
} 

但是,如果存在多種類型,這也許是不可行的。