Registre des convertisseurs et des converterFactories avec des annotations au Printemps 3
Tout d'abord ... Im relativement nouveau au Printemps, j'utilise le printemps 3.x et je N'AIME pas LE PRINTEMPS des FICHIERS de CONFIGURATION XML ... je ne veux pas pour tout le refactoring, je n', à exécuter dans le fichier XML pour les mises à jour ...
Je suis en train de configurer le printemps en sorte que, pour toute demande, si j'ai un peu @RequestParam/@RequestBody/@PathVariable etc avec un autre type de Chaîne de caractères dans mon hadlers, le printemps sera de convertir les valeurs de ce type correctement ou mettre la valeur null à la manipulation de la args (je n'ai jamais utiliser les types primitifs dans le gestionnaire d'arguments). So far So good ...
Jusqu'à maintenant j'ai enregistré toutes les convertisseur/converterFactory classes comme ceci:
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- converters is a set of both converters and converterfactories -->
<bean class="controller.converters.enumConverter" />
<bean class="controller.converters.integerConverter" />
<bean class="controller.converters.objects.FooConverter" />
...
</list>
</property>
</bean>
Est-il un moyen d'enregistrer les convertisseurs avec les annotations?
Peut rien (ou juste les trucs de base) sur le printemps XML être fait avec les annotations seulement, et de se débarrasser de configuration XML une fois pour toutes? ... et comment?
OriginalL'auteur ApollonDigital | 2012-12-08
Vous devez vous connecter pour publier un commentaire.
Printemps n'ont pas d'annotation de soutien pour les Convertisseurs, mais vous pouvez construire votre propre.
Tous vous avez besoin est une coutume qualifier d'annotation (appelons cela
@AutoRegistered
) et une sorte de Convertisseur/Formateur Greffier (implémenteFormatterRegistrar
) qui enregistre toutes les Beans Spring avec cette@AutoRegistered
annotation (et un peu de xml pour enregistrer ce service d'enregistrement).Alors vous avez besoin d'annoter votre conveter avec cette annotation (et quelques autres annotation pour le faire
un printemps bean) et c'est tout.
@AutoRegistered
annotation:Service d'enregistrement:
De configuration XML pour le greffier:
BTW pour votre enum convertisseur vous n'avez pas besoin d'un
ConversionFactory
- un convertisseur simple suffit:Il est FormatterRegistrar (un Ressort 3.1) static.springsource.org/spring/docs/3.1.x/javadoc-api/org/...
OriginalL'auteur Ralph
Vous devez d'abord définir une annotation: TypeConverter
Ensuite, vous devez vous inscrire au service de conversion et ajoutez tous les fèves de l'annotation. Ceci sera fait dans la suite du post processeur:
Si vous avez besoin de plus d'informations, consultez cette l'entrée de blog
OriginalL'auteur gmateo
L'enregistrement automatique du Convertisseur de haricots est également prévu pour le Printemps de Démarrage lorsque
@EnableAutoConfiguration
est activée - voir Caractéristiques des bottes de printemps. Il semble qu'aucune annotations supplémentaires (autres que le marquage de chaque convertisseur de haricots comme une@Component
) est nécessaire pour cela.Sory @Heri, je suis tombé sur ce quand on regarde le code source pour un autre projet mais le Printemps de Démarrage n'est pas utilisé sur la le projet sur lequel je travaille et j'ai fini par aller pour une solution qui était plus proche de la accepté de répondre. Et ne pouvais donc pas les conseiller sur la jUnit tests (supposons ici que vous entendez les tests d'intégration utiliser jUnit?)
Oui, exactement. Je n'ai pas réussi à avoir les Convertisseurs automtically enregistré. Et depuis je n'ai pas réussi, je ne l'ai pas essayé ni dans un normal bootrun de la demande parce que j'ai repris les changements de code (j'ai une solution similaire à gmateo avec annotations personnalisées qui sont ajoutés au printemps créé ConversionService (récupéré dans getConverters()):.
public ConversionService getConversionService() { ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean(); bean.setConverters( getConverters() ); bean.afterPropertiesSet(); ConversionService objet = bean.getObject(); return objet; }
Pour JUnit basée sur des tests d'intégration (avec spring-boot 1.2.7): annotation @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebIntegrationTest("server.port:0") public abstract class ApplicationTestBase { ... }
OriginalL'auteur Steve Chambers
L'approche décrite par @Ralph est soigné, j'ai de +1 à sa réponse. Permettez-moi aussi de vous recommander une approche alternative qui consiste à utiliser
@Configuration
soutien - essentiellement un moyen de configurer le Printemps les haricots à l'aide de Java au lieu de xml. Avec cette démarche, le message des convertisseurs peuvent être enregistrés de cette façon:+1 Cela a fonctionné comme un charme pour moi et je suis totalement débarrassé de configuration XML avec cette.
OriginalL'auteur Biju Kunjummen
Avec Spring MVC, 3.2, vous pouvez créer un service de conversion de classe qui étend la DefaultFormattingConversionService e.g
ApplicationConversionService.java
et le spécifier dans le printemps config e.g
dispatcher-servlet.xml
OriginalL'auteur Timothy Anyona
Je ne suis pas sûr si cela fonctionne au Printemps 3 mais c'est la solution pour le Printemps 4:
DateConverter est un convertisseur personnalisé:
OriginalL'auteur fall