_application.properties
_にいくつかのカスタム属性を追加します。
_custom.mail.property.subject-message=This is a ä ö ü ß problem
_
このクラスには、カスタム属性の表現があります。
_@Component
@ConfigurationProperties(prefix="custom.mail.property")
public class MailProperties {
private String subjectMessage;
public String getSubjectMessage() {
return subjectMessage;
}
public void setSubjectMessage(String subjectMessage) {
this.subjectMessage = subjectMessage;
}
_
そして、ここで私のMailProperties
を使用します:
_@Service
public class SimpleUnknownResponseMessage extends MailProperties implements UnknownResponseMessage{
private JavaMailSender javaMailSender;
@Autowired
public SimpleUnknownResponseMessage(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
@Override
public void placeUnknownResponse(BookResponse bookResponse) {
MimeMessage message = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, "UTF-8");
helper.setSubject(this.getSubjectMessage());
javaMailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
_
デバッグ中に、私のthis.getSubjectMessage()
変数に次の値があることがわかります:_This is a ä ö ü à problem
_。したがって、メールを送信する前に、すでにUTF-8エンコードの問題があります。
_application.properties
_ファイルのエンコードとそのUTF-8を既にチェックしました。
私のIDE(STS/Eclipse)とプロジェクトプロパティもUTF-8に設定されます。
_application.properties
_ファイルのカスタム属性のテキストにUTF-8エンコーディングを設定するにはどうすればよいですか?
コメントですでに述べたように、.propertiesファイルはISO 8859-1でエンコードされることが期待されています。 Unicodeエスケープを使用して他の文字を指定できます。また、変換を行うために利用可能な tool もあります。これは、たとえば、自動ビルドで使用できるため、ソースでお気に入りのエンコードを使用できます。
私は同じ問題に直面しました。 Spring Bootには、アプリケーションにプロパティをロードするために使用される2つのPropertySourceLoaderがあります。
ファイルにリストされている https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/META-INF/spring.factories =
そこで、UTF-8ファイルからプロパティを正しくロードできるPropertySourceLoaderの独自の実装を作成することにしました。アイデアは答え@BalusCからです- ResourceBundleでリソースプロパティでUTF-8を使用する方法
PropertySourceLoaderの実装:
public class UnicodePropertiesPropertySourceLoader implements PropertySourceLoader {
@Override
public String[] getFileExtensions() {
return new String[]{"properties"};
}
@Override
public PropertySource<?> load(String name, Resource resource, String profile) throws IOException {
if (profile == null) {
Properties properties = new Properties();
PropertyResourceBundle bundle = new PropertyResourceBundle(new InputStreamReader(resource.getInputStream(), "UTF-8"));
Enumeration<String> keys = bundle.getKeys();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
properties.setProperty(key, bundle.getString(key));
}
if (!properties.isEmpty()) {
return new PropertiesPropertySource(name, properties);
}
}
return null;
}
}
次に、コンテンツを含むファイルresources/META-INF/spring.factoriesを作成しました。
# Custom PropertySource Loaders
org.springframework.boot.env.PropertySourceLoader=\
your.own.package.UnicodePropertiesPropertySourceLoader
これで、アプリケーションに次の順序で3つのPropertySourceLoaderができました。
ノート!
私たちのプロジェクトでは、このソリューションは問題なく機能します。
更新!
PropertyResourceBundleなしでUnicodePropertiesPropertySourceLoaderのloadメソッドを実装することをお勧めします。
@Override
public PropertySource<?> load(String name, Resource resource, String profile) throws IOException {
if (profile == null) {
Properties properties = new Properties();
properties.load(new InputStreamReader(resource.getInputStream(), "UTF-8"));
if (!properties.isEmpty()) {
return new PropertiesPropertySource(name, properties);
}
}
return null;
}
エンコーディングパラメータを使用したPropertySource
アノテーションを設定ファイルに追加してみてください:
@PropertySource(value = "classpath:application-${env}.properties", encoding = "UTF-8")
それが役に立てば幸い。
Application.properties(およびその他のJavaプロパティと環境変数)のテキストにUTF-8エンコーディングを設定するには、-Dfile.encoding=UTF-8
to Javaコマンドラインagrs。