Registrieren Feder Konverter Programmgesteuert in den Frühling Starten
Ich mich registrieren möchte eine Feder Konverter in eine Spring-Boot-Projekt programmgesteuert. In den vergangenen Spring Projekte, die ich getan habe, es in XML so aus...
<!-- Custom converters to allow automatic binding from Http requests parameters to objects -->
<!-- All converters are annotated w/@Component -->
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<ref bean="stringToAssessmentConverter" />
</list>
</property>
</bean>
Ich versuche, herauszufinden, wie es zu tun ist Spring Boot ist SpringBootServletInitializer
Update: ich habe ein wenig Fortschritte durch die übergabe der StringToAssessmentConverter als argument zu getConversionService
, aber jetzt bin ich ein "No default constructor found"
Fehler für die StringToAssessmentConverter Klasse. Ich bin mir nicht sicher, warum der Frühling ist nicht zu sehen, die @Autowired-Konstruktor.
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
...
@Bean(name="conversionService")
public ConversionServiceFactoryBean getConversionService(StringToAssessmentConverter stringToAssessmentConverter) {
ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
Set<Converter> converters = new HashSet<>();
converters.add(stringToAssessmentConverter);
bean.setConverters(converters);
return bean;
}
}
Hier ist der code für den Konverter...
@Component
public class StringToAssessmentConverter implements Converter<String, Assessment> {
private AssessmentService assessmentService;
@Autowired
public StringToAssessmentConverter(AssessmentService assessmentService) {
this.assessmentService = assessmentService;
}
public Assessment convert(String source) {
Long id = Long.valueOf(source);
try {
return assessmentService.find(id);
} catch (SecurityException ex) {
return null;
}
}
}
Voller Fehler
Failed to execute goal org.springframework.boot:spring-boot-maven-
plugin:1.3.2.RELEASE:run (default-cli) on project yrdstick: An exception
occurred while running. null: InvocationTargetException: Error creating
bean with name
'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPo
stProcessor': Invocation of init method failed; nested exception is
org.springframework.beans.factory.UnsatisfiedDependencyException: Error
creating bean with name 'conversionService' defined in
me.jpolete.yrdstick.Application: Unsatisfied dependency expressed through
constructor argument with index 0 of type
[me.jpolete.yrdstick.websupport.StringToAssessmentConverter]: : Error
creating bean with name 'stringToAssessmentConverter' defined in file
[/yrdstick/target/classes/me/jpolete/yrdstick/websupport
/StringToAssessmentConverter.class]: Instantiation of bean failed; nested
exception is org.springframework.beans.BeanInstantiationException: Failed
to instantiate
[me.jpolete.yrdstick.websupport.StringToAssessmentConverter]: No default
constructor found; nested exception is java.lang.NoSuchMethodException:
me.jpolete.yrdstick.websupport.StringToAssessmentConverter.<init>();
nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating
bean with name 'stringToAssessmentConverter' defined in file [/yrdstick
/dev/yrdstick/target/classes/me/jpolete/yrdstick/websupport
/StringToAssessmentConverter.class]: Instantiation of bean failed; nested
exception is org.springframework.beans.BeanInstantiationException: Failed
to instantiate
[me.jpolete.yrdstick.websupport.StringToAssessmentConverter]: No default
constructor found; nested exception is java.lang.NoSuchMethodException:
me.jpolete.yrdstick.websupport.StringToAssessmentConverter.<init>()
- versuchen Sie, wie diese Wandler.add(new StringToAssessmentConverter());
- Ich kann nicht instanziieren mit new. StringToAssessmentConverter hat eine eigene Autowired Abhängigkeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort ist, Sie müssen nur anotate Ihre Software als
@Component
:Dies ist mein Konverter Beispiel
Dann, wenn der Frühling braucht um zu konvertieren, der Konverter heißt.
Meine Feder Boot-Version:
1.4.1
Hier ist meine Lösung:
Einen TypeConverter-Anmerkung:
Einen Konverter Registrar:
Und dann kommentieren Sie Ihre Konverter:
versuchen Sie dies:
oder wenn Ihr StringToAssessmentConverter ist schon ein spring bean:
@Component
ist das gleiche wie Anmerkungen zu Methode mit@Bean
.StringToAssessmentConverter
ist eine Spring-Bean annotiert mit@Component
, aber jetzt bin ich einFailed to instantiate [me.jpolete.yrdstick.websupport.StringToAssessmentConverter]: No default constructor found;
ich habe dieStringToAssessmentConverter
Konstruktor versehen mit@Autowired
. Nicht sicher, warum, der Konstruktor ist nicht immer genannt.Für Spring Boot sieht es so aus: