Spring - 如何处理bean中的空值

时间:2016-09-29 11:45:56

标签: java spring spring-mvc

如果我在bean中得到一个空值,我想问一下如何处理一个案例。

场景是我有一个加载属性文件并将新属性(我刚刚添加)存储到myProp值的弹簧:

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

当属性设置为truefalse时,一切正常并且符合预期。但是,我想处理属性文件中根本不存在该属性的情况,这意味着它得到null

如何在代码中捕获该状态并处理?

3 个答案:

答案 0 :(得分:0)

您可以将属性定义为布尔对象,并在setter中处理该值。通过这种方式,您可以在spring设置值时管理值。

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/

答案 1 :(得分:0)

如果您正在使用@Value将属性注入到类中,那么如果属性文件没有指定属性,则可以提供默认值:

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

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

现在

    如果没有提供任何内容,
  • myProperty将为false
  • 如果没有提供任何内容,
  • serverUrl将为localhost

我喜欢这样:没有&#34;处理&#34;必要 - 只需使用默认值。

答案 2 :(得分:0)

关于bean validation的整整一章。

特别是,如果您声明BeanValidationPostProcessor,那么您可以在类上使用注释来定义约束:

@Data
public class ConfigurationUtility {

    private boolean defaultsToFalseIfMissing = false;

    @NotNull
    private Boolean errorsIfMissing;

    @NotBlank
    private String mustBeSetToSomethingPrintable;

}

注释文档: