2016-07-08 15 views
0

Ich habe eine einfache JavaMailSender Spring-Boot-Anwendung (nur zum Spaß) erstellt. Hier ist ein Verweis auf den Code auf GitHub:Spring @ Value-Eigenschaft ist Null in benutzerdefinierten Pojo

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

Ich habe ein Problem, bei dem in der E-Mail-Klasse, die „von“ Eigenschaft null ist, auch wenn ich mit Anmerkungen versehen es mit @Value (abgesehen davon, alles funktioniert perfekt). Die Klasse ist wie folgt:

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; 

} 

Ich habe diese Posts gelesen und verstehe das Problem am ehesten verwandt ist.

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

und diese:

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

Allerdings war ich noch nicht alles zum Laufen zu bringen. Jede Hilfe würde sehr geschätzt werden.

+1

vergessen die '$' vor '$ {spring.mail.username}' – ndrone

+3

Ofcourse wird es 'null' sein. Es handelt sich nicht um eine federverwaltete Klasse, sondern um ein Objekt, das außerhalb dieses Bereichs erstellt wurde (von den Spring mVC-Klassen zum Binden Ihres JSON). Diese Objekte werden nicht verarbeitet und so funktioniert '@ Value' nicht. Auch warum möchten Sie, dass diese Eigenschaft in Ihrer E-Mail-Klasse, sollte es in Ihrem Dienst als eine Eigenschaft gehören nicht als Teil des Objekts, das übergeben wird. –

+0

Ok, danke für Ihre Erklärung. Ich dachte, dass die Eigenschaft am besten zum Domänenobjekt E-Mail gehört, da die Eigenschaft mailProperties username immer der Wert ist, der von application.properties übergeben wird. Durch Setzen des "from" -Feldes auf das Email-Objekt mit diesem Wert wäre es expliziter, dass dieses Feld nur einen Wert hat/sollte, der aus der Eigenschaftendatei kommt. –

Antwort

0

Wie Deinum, im Kommentar erwähnt, für nicht von der Feder geführte Klasse, werden die Werte nicht ersetzt.

In Ihrem Fall, da Sie from als Konfiguration erhalten, können Sie das Feld in MailSenderService Klasse verschieben.

Dort müssen Sie das Feld mit @Value Annotation deklarieren. Auch wie von @ndrone erwähnt, sollte der Name der Eigenschaft mit $ vorangestellt werden.

die unten in MailSenderService hinzufügen und aus E-Mail-Klasse entfernen

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