2017-03-06 31 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'注解的类的绑定。 –