Printemps de démarrage de l'application et MessageSource
J'ai essayé de créer une démo de printemps de démarrage de l'app avec MessageSource, mais je ne pouvais pas comprendre ce qui est le problème. J'ai essayé de plusieurs façons:
- MessageSourceAutoConfiguration
- La création de mon propre bean dans un @fichier de configuration et permettra à l'autowiring il
Ci-dessous est la MessageSourceAutoConfiguration façon:
Je suis à l'aide de printemps-amorçage-starter-parent 1.5.7.COMMUNIQUÉ de.
Ma structure de dossier:
DemoApplication.java
@SpringBootApplication
public class DemoApplication
{
public static void main(String[] args)
{
SpringApplication.run(DemoApplication.class, args);
}
}
DemoController.java
@RestController
public class DemoController implements MessageSourceAware
{
private MessageSource messageSource;
@Override
public void setMessageSource(MessageSource messageSource)
{
this.messageSource = messageSource;
}
@RequestMapping("demo")
public String getLocalisedText()
{
return messageSource.getMessage("test", new Object[0], new Locale("el"));
}
}
Application.yml
spring:
messages:
basename: messages
messages.propriétés
test=This is a demo app!
messages_el.propriétés
test=This is a greek demo app!
pom.xml
<groupId>com.example.i18n.demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
<relativePath />
<!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-
8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
Lors du démarrage du serveur, je peux voir que la configuration automatique fonctionne, mais impossible de trouver un haricot:
MessageSourceAutoConfiguration matched:
- ResourceBundle found bundle URL [file:/C:/Users/{user}/Downloads/demo/demo/target/classes/messages.properties] (MessageSourceAutoConfiguration.ResourceBundleCondition)
- @ConditionalOnMissingBean (types: org.springframework.context.MessageSource; SearchStrategy: current) did not find any beans (OnBeanCondition)
J'ai essayé aussi de déclarer explicitement mon propre grain, mais ne fonctionne pas.
Tout en invoquant le point de terminaison j'obtiens l'erreur suivante:
{
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.context.NoSuchMessageException",
"message": "No message found under code 'test' for locale 'el'.",
"path": "/demo"
}
Le plus proche, DONC, la question que j'ai trouvé est celui-ci (2 ans) au sujet d'un bug dans le ressort de laquelle a été fixé un couple de versions il y a:
Printemps De Démarrage MessageSourceAutoConfiguration
Où avez-vous mis votre
messages.properties
. Vous pouvez aussi supprimer le spring.messages.basename
propriété qui est la valeur par défaut.OriginalL'auteur nicolas | 2017-10-10
Vous devez vous connecter pour publier un commentaire.
Pouvez-vous créer un messages paquet de ressources et d'essayer cette Fève de la mise en œuvre dans votre fichier de configuration:
En outre, je vous suggère d'utiliser @Configuration annoté de la configuration des classes au lieu de fichiers xml pour être parfaitement adapté au Printemps de Démarrage concept.
Heureux que vous avez trouvé le problème 🙂
attention! supposons que vous disposez d'un fichier
path/to/messages_en.properties
sur la base de nom, vous devez définir :messageSource.setBasename("file:path/to/messages")
omettant le suffixe_en.properties
Notez que la méthode (haricot) nom de doit être
messageSource()
.OriginalL'auteur ahmetcetin
La question était de mon Eclipse de configuration de l'encodage, je n'ai pas réussi à le résoudre encore.
Après le débogage du Printemps de code (
ReloadableResourceBundleMessageSource.java
) j'ai pu voir monkey=value
bien chargé, mais avec 3 caractères d'espace avant chaque caractère (par exemplet e s t = T h i s i s a d e m o a p p !
).Sur un autre PC de la même démo de l'application fonctionne très bien.
OriginalL'auteur nicolas
J'ai eu le même problème sur springboot app. J'ai testé l'une des options ci-dessous:
Si vous préférez modifier
application.properties
fichier puis ajoutez cette lignespring.messages.basename=messages
où les messages est le préfixe du fichier contenant vos messages. avec ce u n'avez pas à configurer unmessagesource
bean vous-même.ou
j'ai dû donner le
MessageResource
bean un nom et autowire en utilisant le nom donné lors de l'initialisation, sinonDelegatingMessageSource
a été injecté et ce n'était pas la résolution de n'importe quel message de la source.puis autowire le haricot avec le nom u attendre
OriginalL'auteur Aheza Desire