2015-03-20 8 views
3

У меня есть веб-приложение для загрузки весны (с причалом), используя проект 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 } } 
+2

Ваш запрос должен быть 'локальный: 8080/правила/поиск/FindByName имя = test2' – alexvetter

+0

Проклятье, ты прав. Это отлично работает. Благодарю. (Если вы положите это как ответ, я буду рад «проверить» его как правильное.) –

+0

Хорошо, я сделаю это. :-D – alexvetter

ответ

2

Ваш запрос должен быть 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

+0

Спасибо (снова). «{? Name}« бросил меня »- думал, что это означает« НАПРАВЛЯТЬ ВАШЕ ИМЯ ЗДЕСЬ ». –

+0

Я искал документацию для этого, но я не нашел. : - / – alexvetter

Смежные вопросы