在Spring启动时使用MongoTemplate时出现NullPointerException

时间:2017-10-10 03:29:37

标签: mongodb spring-boot nullpointerexception spring-mongo

我有一个名为'statusbynumbers'的集合,我定义了这样的实体:

@Document(collection="statusbynumbers") 
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StatusByNumbersEntity {
    @Id
    private String id;

    @Field("number")
    private String number;

    @Field("level")
    private String 

    @Field("yat")
    private double yat;
}

密钥'yat'是db中的double类型。但在我的业务逻辑中,在某些情况下,'yat'可以为null。然后,当我使用MongoTemplate.find()方法时,导致java.lang.NullPointerException:null。我的代码中使用的MongoTemplate.find()如下所示:

public class ReportsServiceImpl implements ReportsService {
    @Resource
    private MongoTemplate ReportsMongoTemplate;

    @Override
    public List<StatusByNumbersEntity> getNumbersByFilterLevel(String filterLevel) {
        List<Integer> filterLevelList = FilterLevelModel.buildFilterLevel(filterLevel);

        Criteria criteria = Criteria.where("level").in(filterLevelList);
        Query query = new Query(criteria);
        // java.lang.NullPointerException: null caused by the following code
        List<StatusByNumbersEntity> numList = ReportsMongoTemplate.find(query,StatusByNumbersEntity.class); 

    ...
}

详细错误日志如下所示

    2017-10-10 02:47:06.475 ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is
java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
at sun.invoke.util.ValueConversions.unboxDouble(ValueConversions.java:139)
at com.test.application.entities.reports.numbersEntity_Accessor_22t0xt.setProperty(Unknown Source)
at org.springframework.data.mapping.model.ConvertingPropertyAccessor.setProperty(ConvertingPropertyAccessor.java:58)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$1.doWithPersistentProperty(MappingMongoConverter.java:291)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$1.doWithPersistentProperty(MappingMongoConverter.java:279)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:330)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:279)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:239)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:199)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:195)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:85)
at org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:2324)
at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1969)
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1787)
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1770)
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:644)
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:635)

我怎么能使用MongoTemplate.find()方法,即使键“yat”可以为null而不是double类型以避免此NullPointerException?

1 个答案:

答案 0 :(得分:0)

这是因为您为可为空的字段使用了原始类型变量(带有小写字母'd'的双精度型)。 您不能为原始数据类型设置null值(提示NullPointerException)

将“ double”替换为“ Double”

@Field("yat")
private Double yat;

请记住,您也不能将null值转换为原始数据类型。 因为当您有setter和getter时,它们中的基本类型也将被替换为非基本类型。

更多详细信息: https://www.w3schools.com/java/java_data_types.asp