2017-03-06 67 views
0

假設以下配置豆:@ConfigurationProperties和未解析的屬性

@ConfigurationProperties(prefix="foo") 
private class FooProperties { 
    private String mystring; 
    private int myint; 
} 

和以下application.properties

foo.mystring = ${bar.mystring} 
foo.myint = ${bar.myint} 

通知的兩個屬性是不可解析因爲開始bar沒有屬性定義。這是會發生什麼:

  • foo.mystring被設置爲字符串"${bar.mystring}"(無分辨率)
  • foo.myint將導致轉換錯誤,因爲字符串"${bar.myint}"不能轉換爲有效的整數。

我反而會期待一種無法解析的屬性在這種情況下拋出異常。就像我使用@Value("${foo.mystring}")會發生什麼。

預期這種行爲? 有沒有辦法讓SpringBoot在這種情況下拋出這種異常?

回答

0

我會反而會在這種情況下拋出一種不可解析屬性異常 。

foo.myint不扔Unresolvable Property exception,因爲它是與${bar.myint},而它在下一步驟失敗時春嘗試強制轉換Stringint爲你存儲Properties文件中的每一件事情得到解決是一個字符串值,除非你明確指定它的類型,如:

foo.myint = (java.lang.Integer)${bar.myint} 

是行爲預期?

可能是的。

有沒有辦法讓SpringBoot在這種情況下拋出這種異常?

是的,對於Global水平,你可以使用@ControllerAdvice,如果你想擁有它在Controller的水平,那麼你可以用@ExceptionHandler

+0

去同意你與問候到'int'財產。 但是,您提出的解決方案似乎適用於Web綁定的東西。我在這裏關心屬性與'@ ConfigurationProperties'註解的類的綁定。 –