2016-07-08 95 views
0

我创建了一个简单的JavaMailSender弹簧引导应用程序(仅用于娱乐)。下面是对代码的引用在GitHub上:Spring @Value属性在自定义pojo中为null

https://github.com/carlcorder/mail.sender

我有一个问题,即电子邮件类中,“从”属性为空,即使我有@Value注释它(除此之外,一切都完美)。该类如下:

package com.mail.sender.domain; 

import lombok.NonNull; 
import org.springframework.beans.factory.annotation.Value; 

@lombok.Data 
@lombok.AllArgsConstructor 
@lombok.NoArgsConstructor 
@lombok.Builder 
public class Email { 

    @NonNull 
    private String to; 

    @NonNull 
    //@Value("{spring.mail.username}") --> this is always null 
    private String from; 

    @NonNull 
    private String subject; 

    private String body; 

} 

我看过这些帖子和理解这个问题是最可能与。

Difference between applicationContext.xml and spring-servlet.xml in Spring Framework

这:

Spring @Value annotation in @Controller class not evaluating to value inside properties file

不过,我仍然无法得到任何工作。任何帮助将不胜感激。

+1

删除它忘记了前面的'$''$ {spring.mail.username}' – ndrone

+3

Ofcourse这将是'null'。它不是一个Spring管理的类,而是一个在该范围之外创建的对象(由Spring MVC类来绑定你的JSON)。这些对象不会被处理,因此'@ Value'不起作用。此外,为什么你想要在你的电子邮件类的属性,它应该属于你的服务作为属性,而不是作为传入的对象的一部分。 –

+0

好的,谢谢你的解释。我认为该属性最好属于电子邮件域对象,因为Spring MailProperties的用户名属性始终是从application.properties传递的值。通过使用此值设置Email对象的“from”字段,可以更明确地指出该字段将/应该只有每个值都来自属性文件。 –

回答

0

作为Deinum,在评论中提到,对于非弹簧托管类,值将不会被替换。

对于您的情况,由于您将from配置为配置,因此可以将该字段移至MailSenderService类。

在那里您需要声明该字段为@Value注释。 也如@ndrone所述,属性名称应以$为前缀。

添加下面MailSenderService和电子邮件类

@Value("${spring.mail.username}") 
private String from;