Spring Data Rest + Spring Boot - findBy* 没有将参数传递给 MongoDB?
Spring Data Rest + Spring Boot - findBy* not passing parameter to MongoDB?
我有一个使用 spring-data-rest 项目的 spring 启动网络应用程序(带码头),我无法从 GET 请求中获取参数以传递给mongo查询。
我确定我做错了什么,但需要一些指导。
TL;DR...search/query =>
$ http GET localhost:8080/rules/search/findByName?test2 # <-- NOTE 'test2'
HTTP/1.1 200 OK
Content-Type: application/hal+json; charset=UTF-8
Date: Fri, 20 Mar 2015 13:54:35 GMT
Server: Jetty(9.2.9.v20150224)
Transfer-Encoding: chunked
X-Application-Context: application
{}
Mongo锯=>
> db.system.profile.find({op:"query", ns: "test.rule"}, {query: 1}). sort({ts:-1}).pretty()
{ "query" : { "name" : null } } # <-- Note *NOT* 'test2'
长话短说...
我有一个简单的 "Rule" class,只有 ID 和名称。
public class Rule {
private String id;
private String name;
// getters/setters removed for brevity.
}
我的存储库公开了一个 findByName()
方法。
@RestResource
interface RuleRepository extends CrudRepository<Rule, String> {
List<Rule> findByName(@Param("name") String name)
}
当我 POST 到 spring 启动应用程序时,它工作正常。我可以完美地看到mongo数据库中的数据。
(使用 httpie
应用程序 post...)
$ http POST localhost:8080/rules name="test2"
HTTP/1.1 201 Created
Content-Length: 0
Date: Fri, 20 Mar 2015 13:49:02 GMT
Location: http://localhost:8080/rules/550c254e87867064832263b3
Server: Jetty(9.2.9.v20150224)
X-Application-Context: application
mongo...
> db.rule.find({})
{ "_id" : ObjectId("550c254e87867064832263b3"), "_class" : "<package>.Rule", "name" : "test2" }
到目前为止一切正常。
$ http GET localhost:8080/rules
HTTP/1.1 200 OK
Content-Type: application/hal+json; charset=UTF-8
Date: Fri, 20 Mar 2015 13:51:36 GMT
Server: Jetty(9.2.9.v20150224)
Transfer-Encoding: chunked
X-Application-Context: application
{ "_embedded": { "rules": [ ... brevity. Everything is here that should be ...
而且搜索资源看起来没问题。
$ http GET localhost:8080/rules/search
HTTP/1.1 200 OK
Content-Type: application/hal+json; charset=UTF-8
Date: Fri, 20 Mar 2015 13:51:47 GMT
Server: Jetty(9.2.9.v20150224)
Transfer-Encoding: chunked
X-Application-Context: application
{
"_links": {
"findByName": {
"href": "http://localhost:8080/rules/search/findByName{?name}",
"templated": true
}
}
}
但是当我搜索时,returns 没有任何内容,并且 mongo 报告查询已传递 null。
$ http GET localhost:8080/rules/search/findByName?test2
HTTP/1.1 200 OK
Content-Type: application/hal+json; charset=UTF-8
Date: Fri, 20 Mar 2015 13:54:35 GMT
Server: Jetty(9.2.9.v20150224)
Transfer-Encoding: chunked
X-Application-Context: application
{}
Mongo...
> db.system.profile.find({op:"query", ns: "test.rule"}, {query: 1}). sort({ts:-1}).pretty()
{ "query" : { "name" : null } }
您的请求应该是localhost:8080/rules/search/findByName?name=test2
。如 localhost:8080/rules/search
的 HATEOAS
回复所述:
{
"_links": {
"findByName": {
"href": "http://localhost:8080/rules/search/findByName{?name}",
"templated": true
}
}
}
findByName{?name}
⟶findByName?name=ABC
我有一个使用 spring-data-rest 项目的 spring 启动网络应用程序(带码头),我无法从 GET 请求中获取参数以传递给mongo查询。
我确定我做错了什么,但需要一些指导。
TL;DR...search/query =>
$ http GET localhost:8080/rules/search/findByName?test2 # <-- NOTE 'test2'
HTTP/1.1 200 OK
Content-Type: application/hal+json; charset=UTF-8
Date: Fri, 20 Mar 2015 13:54:35 GMT
Server: Jetty(9.2.9.v20150224)
Transfer-Encoding: chunked
X-Application-Context: application
{}
Mongo锯=>
> db.system.profile.find({op:"query", ns: "test.rule"}, {query: 1}). sort({ts:-1}).pretty()
{ "query" : { "name" : null } } # <-- Note *NOT* 'test2'
长话短说...
我有一个简单的 "Rule" class,只有 ID 和名称。
public class Rule {
private String id;
private String name;
// getters/setters removed for brevity.
}
我的存储库公开了一个 findByName()
方法。
@RestResource
interface RuleRepository extends CrudRepository<Rule, String> {
List<Rule> findByName(@Param("name") String name)
}
当我 POST 到 spring 启动应用程序时,它工作正常。我可以完美地看到mongo数据库中的数据。
(使用 httpie
应用程序 post...)
$ http POST localhost:8080/rules name="test2"
HTTP/1.1 201 Created
Content-Length: 0
Date: Fri, 20 Mar 2015 13:49:02 GMT
Location: http://localhost:8080/rules/550c254e87867064832263b3
Server: Jetty(9.2.9.v20150224)
X-Application-Context: application
mongo...
> db.rule.find({})
{ "_id" : ObjectId("550c254e87867064832263b3"), "_class" : "<package>.Rule", "name" : "test2" }
到目前为止一切正常。
$ http GET localhost:8080/rules
HTTP/1.1 200 OK
Content-Type: application/hal+json; charset=UTF-8
Date: Fri, 20 Mar 2015 13:51:36 GMT
Server: Jetty(9.2.9.v20150224)
Transfer-Encoding: chunked
X-Application-Context: application
{ "_embedded": { "rules": [ ... brevity. Everything is here that should be ...
而且搜索资源看起来没问题。
$ http GET localhost:8080/rules/search
HTTP/1.1 200 OK
Content-Type: application/hal+json; charset=UTF-8
Date: Fri, 20 Mar 2015 13:51:47 GMT
Server: Jetty(9.2.9.v20150224)
Transfer-Encoding: chunked
X-Application-Context: application
{
"_links": {
"findByName": {
"href": "http://localhost:8080/rules/search/findByName{?name}",
"templated": true
}
}
}
但是当我搜索时,returns 没有任何内容,并且 mongo 报告查询已传递 null。
$ http GET localhost:8080/rules/search/findByName?test2
HTTP/1.1 200 OK
Content-Type: application/hal+json; charset=UTF-8
Date: Fri, 20 Mar 2015 13:54:35 GMT
Server: Jetty(9.2.9.v20150224)
Transfer-Encoding: chunked
X-Application-Context: application
{}
Mongo...
> db.system.profile.find({op:"query", ns: "test.rule"}, {query: 1}). sort({ts:-1}).pretty()
{ "query" : { "name" : null } }
您的请求应该是localhost:8080/rules/search/findByName?name=test2
。如 localhost:8080/rules/search
的 HATEOAS
回复所述:
{
"_links": {
"findByName": {
"href": "http://localhost:8080/rules/search/findByName{?name}",
"templated": true
}
}
}
findByName{?name}
⟶findByName?name=ABC