In my Spring application I use the line
@Autowired
private transient EntityService entityService;
at some places successful to get get the EntityService. But not so in the AbstractHttpMessageConverter I write to give CSV responses (which works generally)
public class SearchResultCsvConverter extends AbstractHttpMessageConverter<SearchResult> {
public SearchResultCsvConverter() {
super(new MediaType("text", "csv"));
}
@Autowired
private transient EntityService entityService;
Registration:
@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());
}
The SearchResultCsvConverter as such works, also EntityService is present in the ApplicationConfiguration, but in SearchResultCsvConverter it's null. Any hints where I might find the mistake oder what to look after are much appreciated!
I use Spring 4.3.4.
-- edit 1
I tried @service for the SearchResultCsvConverter as well - same result.
-- edit 2: solution thanks to @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);
and in the Converter
private transient EntityService entityService;
public SearchResultCsvConverter() {
super(new MediaType("text", "csv"));
}
public void setEntityService(EntityService entityService) {
this.entityService = entityService;
}
Doesn't look so elegant to me, but works fine.