在我的Spring应用程序中,我使用了行
@Autowired
private transient EntityService entityService;
在某些地方成功获得EntityService。但是我在编写的AbstractHttpMessageConverter中不是这样给出了CSV响应(通常可以正常工作)
public class SearchResultCsvConverter extends AbstractHttpMessageConverter<SearchResult> {
public SearchResultCsvConverter() {
super(new MediaType("text", "csv"));
}
@Autowired
private transient EntityService entityService;
注册:
@ComponentScan(...)
@Configuration
@EnableWebMvc
@EnableAsync
@EnableTransactionManagement
@EnableSpringConfigured
@PropertySource("classpath:config/application.properties")
public class ApplicationConfiguration extends WebMvcConfigurerAdapter {
@Inject
private Environment environment;
@Autowired
private transient EntityService entityService;
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new SearchResultCsvConverter());
}
SearchResultCsvConverter就是这样工作的,EntityService也存在于ApplicationConfiguration中,但是在SearchResultCsvConverter中它是null。任何暗示我可能会发现错误或任何需要照顾的提示都非常感谢!
我使用Spring 4.3.4。
- 编辑1
我也尝试了@service用于SearchResultCsvConverter - 结果相同。
- 编辑2:解决方案感谢@Radu Pop
public class ApplicationConfiguration extends WebMvcConfigurerAdapter {
@Inject
private Environment environment;
@Autowired
private transient EntityService entityService;
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
final SearchResultCsvConverter searchResultCsvConverter = new SearchResultCsvConverter();
searchResultCsvConverter.setEntityService(entityService);
converters.add(searchResultCsvConverter);
并在转换器中
private transient EntityService entityService;
public SearchResultCsvConverter() {
super(new MediaType("text", "csv"));
}
public void setEntityService(EntityService entityService) {
this.entityService = entityService;
}
对我来说看起来不那么优雅,但效果很好。
答案 0 :(得分:0)
从我的代码中可以看出,您编写的转换器类在Spring应用程序上下文中不被视为bean。这是因为在您的应用程序配置类中定义的列表本身是一个bean,但是没有这样的元素。
因此,您可以将简单转换器视为bean。您可以通过使用@Configurable方法来实现,但是您需要启用spring AOP的可能性,或者您可以在应用程序配置类中创建一个方法,该方法将返回该类型的bean并在那里执行实例化。此方法将在返回列表的方法中引用,以正确填充转换器与您的自定义bean。