Spring Data Rest + Spring Boot - findBy * не передает параметр в MongoDB?

У меня есть веб-приложение с весенней загрузкой (с пристанью), использующее проект spring-data-rest, и я не могу получить параметр из запроса GET для передачи в запрос монго.

Я уверен, что делаю что-то не так, но мне нужен совет, что именно.

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.
}

Мой репозиторий предоставляет метод findByName().

@RestResource
interface RuleRepository extends CrudRepository<Rule, String> {
    List<Rule> findByName(@Param("name") String name)
}

Когда я отправляю сообщение в приложение весенней загрузки, оно работает нормально. Я отлично вижу данные в базе данных монго.

(используя приложение 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
        }
    }
}

Но когда я ищу, ничего не возвращается, и монго сообщает, что запрос был передан как нуль.

$ 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 } }

person Michael Campbell    schedule 20.03.2015    source источник
comment
Ваш запрос должен быть localhost:8080/rules/search/findByName?name=test2   -  person alexvetter    schedule 20.03.2015
comment
Черт возьми, ты прав. Это прекрасно работает. Спасибо. (Если вы поставите это как ответ, я буду рад проверить его как правильный.)   -  person Michael Campbell    schedule 20.03.2015
comment
Хорошо, я сделаю это. :-Д   -  person alexvetter    schedule 20.03.2015


Ответы (1)


Ваш запрос должен быть localhost:8080/rules/search/findByName?name=test2. Как указано в HATEOAS ответе localhost:8080/rules/search:

{
    "_links": {
        "findByName": {
            "href": "http://localhost:8080/rules/search/findByName{?name}",
            "templated": true
        }
    }
}

findByName{?name}findByName?name=ABC

person alexvetter    schedule 20.03.2015
comment
Спасибо еще раз). {?name} бросил меня - думал, что это означает НАПИШИТЕ ЗДЕСЬ ВАШЕ ИМЯ. - person Michael Campbell; 20.03.2015
comment
Я искал документацию для этого, но я не нашел. :-/ - person alexvetter; 20.03.2015