Ich versuche benutzerdefinierte Eigenschaftseditoren mithilfe der folgenden Konfiguration in meiner Spring-Startanwendung zu registrieren. Die folgende Dokumentation link Abschnitt 5.4.2.1.Registrierung CustomPropertyEditors für die Verwendung in BeanWrapper
@Bean
public static CustomEditorConfigurer customEditorConfigurer() {
CustomEditorConfigurer configurer = new CustomEditorConfigurer();
configurer.setPropertyEditorRegistrars(new PropertyEditorRegistrar[] {
(registry) -> registry.registerCustomEditor(Instant.class, new CustomInstantEditor()) });
return configurer;
}
Wenn habe ich eine BeanWrapper und dessen Verwendung ich folgende Fehler
-Code bin immer:
BeanWrapper newAccountWrapper = new BeanWrapperImpl(newAccount);
newAccountWrapper.setPropertyValue("chardate", value);
Fehler ist:
Exception is Failed to convert property value of type [java.lang.String] to required type [java.time.Instant] for property 'chardate'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.time.Instant] for property 'chardate': no matching editors or conversion strategy found
Aber der obige Code funktioniert, wenn Ich registriere den CustomEditor für den BeanWrapper
BeanWrapper newAccountWrapper = new BeanWrapperImpl(newAccount);
newAccountWrapper.registerCustomEditor(Instant.class, new
CustomInstantEditor());
Kann ich nicht customPropertyEditors mit CustomEditorConfigurer BeanFactoryPostProcessor registrieren?
Zusätzliche Information:
BeanWrapper newAccountWrapper = new BeanWrapperImpl(newAccount);
newAccountWrapper.registerCustomEditor(Instant.class, new CustomInstantEditor());
newAccountWrapper.registerCustomEditor(Money.class, new CustomMoneyEditor());
newAccountWrapper.setAutoGrowNestedPaths(true);
accountDomainElements.forEach((accountElement, value) -> {
newAccountWrapper.setPropertyValue(accountElement, value);
Nicht Geben Sie versuchen, wenn Sie die 'BeanWrapper' selbst erstellen und nicht die konfiguriert für sie gelten. Wenn Spring eine Instanz erstellt, erkennt es alle Konfiguratoren und wendet diese auf die erstellte BeanWrapper-Implementierung an. Du machst das nicht und im Grunde umgehen wir Spring in diesem. Warum erstellst du deine eigene Instanz? –
Also, wenn ich einen BeanWrapper erstellen, sollte ich es explizit konfigurieren und CustomEditorConfigurer wird nicht helfen –
Nein, wenn die Spring MVC Stuff erstellt eine 'BeanWrapper'-Instanz, es tut einige zusätzliche Konfiguration. Es setzt den 'ConversionService' und benutzt registrierte' PropertyEditorRegistrar' Instanzen, um zusätzliche 'PropertyEditors' hinzuzufügen. Da Sie die Instanzen selbst erstellen, umgehen Sie diese Option jedoch vollständig. Warum müssen Sie sogar Ihre eigene Instanz des 'BeanWrapper's erstellen, die Sie normalerweise nicht selbst machen. –