我有一个名为'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?
答案 0 :(得分:0)
这是因为您为可为空的字段使用了原始类型变量(带有小写字母'd'的双精度型)。 您不能为原始数据类型设置null值(提示NullPointerException)
将“ double”替换为“ Double”
@Field("yat")
private Double yat;
请记住,您也不能将null值转换为原始数据类型。 因为当您有setter和getter时,它们中的基本类型也将被替换为非基本类型。