【发布时间】:2021-10-26 02:37:08
【问题描述】:
我有一个带有像这样的 lombok @Data 注释的 POJO
@Data
public class RmsSearchRequestDto {
private AuditCredentialsDto auditCredentialsDto;
private RmsSearchCriteriaDto rmsSearchCriteriaDto;
}
内部类又是带有@Data注解的POJO。
现在当我创建一个新的 RmsSearchRequestDto 实例时:
RmsSearchRequestDto rmsSearch=new RmsSearchRequestDto();
它将 auditCredentialsDto 和 rmsSearchCriteriaDto 设置为 null 并在我尝试访问时导致 NullPointerException
rmsSearch.getRmsSearchCriteriaDto().getSearchType();
导致 rmsSearch.getRmsSearchCriteriaDto() 返回 null 而不是返回 RmsSearchCriteriaDto 的实例(期望结果)
这种行为对我来说很奇怪,在谷歌上找不到任何东西。我正在使用 Spring Boot 2.5.6。这是一个有 20 年历史的遗留项目,直到最近我尝试从 CustomValidators 切换到 Spring Bean Validation 时才遇到这个问题。谢谢。
【问题讨论】:
-
这是正常的 Java 行为。类的字段默认初始化为
null。 -
我现在无法访问 Lombok 站点,但教程暗示使用
@Data,如果字段是final,您只会获得为字段生成的初始化代码。 -
是的,我也无法访问龙目岛。他们似乎倒下了。他们不应该被初始化为类的实例吗?
-
不符合我看过的教程中的示例。 (而且这样做没有多大意义......对我来说。)我怀疑你的问题的真正原因是......别的东西。例如。您的更改改变了 Spring 自动装配的工作方式。
-
感谢 cmets 伙计们。我误解了这种默认行为。
标签: java spring spring-boot spring-mvc lombok