У меня есть веб-приложение для загрузки весны (с причалом), используя проект Spring-Data-Rest, и я не могу получить параметр из запроса GET, чтобы перейти к запросу mongo.Spring Data Rest + Spring Boot - findBy * не передается параметр MongoDB?
Я уверен, что я делаю что-то неправильно, но мне нужно какое-то руководство к чему.
TL; DR ... поиск/запрос =>
$ 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
{}
Монго видел =>
> db.system.profile.find({op:"query", ns: "test.rule"}, {query: 1}). sort({ts:-1}).pretty()
{ "query" : { "name" : null } } # <-- Note *NOT* 'test2'
длинная история ...
У меня есть простой "правила" класс с не чем иным, как идентификатором и именем.
public class Rule {
private String id;
private String name;
// getters/setters removed for brevity.
}
My Repository предоставляет метод findByName()
.
@RestResource
interface RuleRepository extends CrudRepository<Rule, String> {
List<Rule> findByName(@Param("name") String name)
}
Когда я отправляю сообщение в приложение для загрузки весны, он отлично работает. Я прекрасно вижу данные в базе данных mongo.
(используя httpie
приложение для размещения ...)
$ 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
Монго ...
> 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
}
}
}
Но когда я ищу, ничего не возвращается, и монго сообщает, что запрос был передан 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
{}
Монго ...
> db.system.profile.find({op:"query", ns: "test.rule"}, {query: 1}). sort({ts:-1}).pretty()
{ "query" : { "name" : null } }
Ваш запрос должен быть 'локальный: 8080/правила/поиск/FindByName имя = test2' – alexvetter
Проклятье, ты прав. Это отлично работает. Благодарю. (Если вы положите это как ответ, я буду рад «проверить» его как правильное.) –
Хорошо, я сделаю это. :-D – alexvetter