Pat*_*ick 22 java encoding spring utf-8 spring-boot
在我的application.properties
添加一些自定义属性.
custom.mail.property.subject-message=This is a ä ö ü ß problem
Run Code Online (Sandbox Code Playgroud)
在这个类中,我有自定义属性的表示.
@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;
}
Run Code Online (Sandbox Code Playgroud)
在这里我用我的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();
}
}
Run Code Online (Sandbox Code Playgroud)
调试时我可以看到我的this.getSubjectMessage()
变量里面有这个值:This is a ä ö ü à problem
.所以在发送邮件之前我已经有了UTF-8编码问题.
我已经检查了application.properties
文件的编码及其UTF-8.
我的IDE(STS/Eclipse)和项目属性也在UTF-8上设置.
如何在文件中为自定义属性的文本设置UTF-8编码application.properties
?
May*_*y12 15
请尝试将PropertySource
带编码参数的注释添加到Configuaration文件中:
@PropertySource(value = "classpath:application-${env}.properties", encoding = "UTF-8")
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
小智 8
我遇到了同样的问题.在Spring Boot中有2个PropertySourceLoader,用于在应用程序中加载属性:
所以我们决定编写自己的PropertySourceLoader实现,它可以正确地从UTF-8文件加载属性.这个想法来自于答案@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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们用内容创建了文件资源/ META-INF/spring.factories:
# Custom PropertySource Loaders
org.springframework.boot.env.PropertySourceLoader=\
your.own.package.UnicodePropertiesPropertySourceLoader
Run Code Online (Sandbox Code Playgroud)
现在我们的应用程序中有3个PropertySourceLoader,顺序如下:
笔记!
在我们的项目中,此解决方案正常.
UPDATE!
最好在没有PropertyResourceBundle的情况下实现UnicodePropertiesPropertySourceLoader的加载方法:
@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;
}
Run Code Online (Sandbox Code Playgroud)
要为 application.properties(以及任何其他 Java 属性以及环境变量)中的文本设置 UTF-8 编码,请添加-Dfile.encoding=UTF-8
到 java 命令行 agrs。
归档时间: |
|
查看次数: |
24937 次 |
最近记录: |