2016-09-29 37 views
1

我想問如何處理一個情況,如果我在bean中獲得一個空值。春天 - 如何處理bean中的空值

的情況是,我有一個加載一個屬性文件並保存新的屬性(我只是添加)到myProp值彈簧:

<bean id="ConfigurationUtility" class="configuration.ConfigurationUtility"> 
    <property name="UntilTimeInQuote" value="myProp"/> 
</bean> 

當該屬性設置爲truefalse一切工作正常和預期的一樣。但是,我想處理屬性不存在於屬性文件中的情況,這意味着它得到null

如何捕獲該狀態並在代碼中處理?

+0

你到底想要如何處理這些錯誤? – OrangeDog

回答

0

您可以將您的屬性定義爲布爾對象並在setter中處理該值。通過這種方式,您可以在彈簧設置該值時管理該值。

public class MyBean{ 
private Boolean untilTimeInQuote; 
public setUntilTimeInQuote(Boolean value){ 
if(value == null){ 
//do something. 
}else{ 
// do something else. 
} 
} 
} 

另一種選擇是使用bean後期處理器動作,它在bean創建後和屬性設置後觸發。

public class MyBean{ 
private Boolean untilTimeInQuote; 

@PostConstruct 
public void init(){ 
if(untilTimeInQuote == null){ 
//do something. 
}else{ 
// do something else. 
} 
} 

public setUntilTimeInQuote(Boolean value){ 
this.untilTimeInQuote = value 
} 
} 
} 

你可以看到更多在這裏 https://www.mkyong.com/spring/spring-postconstruct-and-predestroy-example/

+0

http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks – dit

0

如果您使用@Value的特性注入到你的類,那麼你可以提供一個默認情況下使用,如果屬性文件沒有指定一個:

public class MyClass { 
    @Value("${myProperty:false}") 
    private boolean myProperty; 

    @Value("${serverUrl:localhost}") 
    private String serverUrl; 
} 

現在

  • 如果沒有提供它,3210將是false
  • serverUrl將是localhost如果沒有提供它。

我喜歡這種方式:不需要「處理」 - 只需使用默認值即可。

0

有上bean validation一整章。

特別是,如果聲明一個BeanValidationPostProcessor,則可以使用上你的類的註釋定義約束:

@Data 
public class ConfigurationUtility { 

    private boolean defaultsToFalseIfMissing = false; 

    @NotNull 
    private Boolean errorsIfMissing; 

    @NotBlank 
    private String mustBeSetToSomethingPrintable; 

} 

註釋文檔: