Spring MongoDB @Query参数?0没有被替换

时间:2016-07-19 12:03:51

标签: spring mongodb

我使用Spring / MongoDB @Query注释,如下所示指定@EnableMongoRepositories,但String参数替换会导致解析/数字格式异常。当我对字符串日期进行硬编码以进行调试时,它可以工作。我错过了一个依赖或什么来让这个工作。以下是相关部分:

这有效:

mkdir ui
echo "test1" > ui/file1.js
echo "test2" > ui/file2.js

这不是:

@Query("{'MyData.fromDatestamp' : { $gte: { $numberLong: \"20130801000000\" } }}")
List<MyData> findMyData();

错误:

@Query("{'MyData.fromDatestamp' : { $gte: { $numberLong: ?0 } }}")
List<MyData> findMyData(String fromDatestamp);

以下是我的依赖项:

java.lang.NumberFormatException: For input string: "_param_0"

...

dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE")
}

这是我的配置:

compile("org.springframework.boot:spring-boot-starter-web") {
    exclude module: "spring-boot-starter-tomcat"
}
compile("org.springframework.boot:spring-boot-starter-jetty")
compile("org.springframework.data:spring-data-mongodb")
compile("org.mongodb:mongo-java-driver:3.2.2")
compile("com.fasterxml.jackson.core:jackson-core:2.8.0")
compile("com.fasterxml.jackson.core:jackson-annotations:2.8.0")

}

另外,我尝试过使用JSONParseException失败的这些变体:

@Configuration public class MongoConfig extends AbstractMongoConfiguration {
@Override
protected String getDatabaseName() {
    return databaseName;
}

@Bean
public MongoClient mongoClient() throws Exception {
    return new MongoClient(dataStoreHost,dataStorePort);
}

@Override
public Mongo mongo() throws Exception {
    return mongoClient();
}

@Bean
public MongoDbFactory mongoDbFactory() throws Exception {
    return new SimpleMongoDbFactory(mongoClient(), databaseName);
}

@Override
@Bean
public MongoTemplate mongoTemplate() throws Exception {
    return new MongoTemplate(mongoDbFactory());
}

@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
    return new PropertySourcesPlaceholderConfigurer();
}

提前感谢任何见解或想法!

1 个答案:

答案 0 :(得分:0)

我将类型更改为long,并且有效。我曾尝试在早期的测试中从String更改为long,但我想也许在不需要时我在查询json中指定了$ numberLong。虽然它在我的日期字段的Mongo控制台中显示了NumberLong,但这最终适用于查询。请注意,我还在我的界面顶部添加了@Repository注释:

@Query(value = "{MyData.fromDatestamp : { $gte: ?0 } }")
List<MyData> findMyData(long fromDatestamp);