使用SpringBoot将MongoDB公开为REST:返回对象类型是什么

时间:2017-10-04 20:46:15

标签: mongodb rest spring-boot

通过使用SpringBoot将MongoDB集合作为REST服务公开,我在服务上执行HTTP GET时会收到这样的文档

$ curl http://localhost:8080/people
{
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/people{?page,size,sort}",
      "templated" : true
    },
    "search" : {
      "href" : "http://localhost:8080/people/search"
    }
  },
 "_embedded" : {
    "persons" : [ {
      "firstName" : "Frodo",
      "lastName" : "Baggins",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/people/53149b8e3004990b1af9f229"
        }
      }
    } ]
  },
  "page" : {
    "size" : 20,
    "totalElements" : 1,
    "totalPages" : 1,
    "number" : 0
  }
}

集合中包含的人员位于“_embedded”部分。

我想简单地使用People列表,那么使用的URL是什么?或者,这个返回文档的对象类型是什么,以便我可以反序列化它?

1 个答案:

答案 0 :(得分:0)

这些只是Spring Mongo数据休息API上可用的休息端点。

{[/{people}],methods=[OPTIONS],produces=[application/hal+json || application/json]}
{[/{people}],methods=[HEAD],produces=[application/hal+json || application/json]}
{[/{people}],methods=[GET],produces=[application/hal+json || application/json]}
{[/{people}],methods=[GET],produces=[application/x-spring-data-compact+json || text/uri-list]
{[/{people}],methods=[POST],produces=[application/hal+json || application/json]}
{[/{people}/{id}],methods=[OPTIONS],produces=[application/hal+json || application/json]}
{[/{people}/{id}],methods=[HEAD],produces=[application/hal+json || application/json]}
{[/{people}/{id}],methods=[GET],produces=[application/hal+json || application/json]}
{{/{people}/{id}],methods=[PUT],produces=[application/hal+json || application/json]}
{[/{people}/{id}],methods=[PATCH],produces=[application/hal+json || application/json]}
{[/{people}/{id}],methods=[DELETE],produces=[application/hal+json || application/json]}
{[/ || ],methods=[OPTIONS],produces=[application/hal+json || application/json]}
{[/ || ],methods=[HEAD],produces=[application/hal+json || application/json]}
{[/ || ],methods=[GET],produces=[application/hal+json || application/json]}
{[/{people}/{id}/{property}],methods=[GET],produces=[application/hal+json || application/json]}
{[/{people}/{id}/{property}/{propertyId}],methods=[GET],produces=[application/hal+json || application/json]}
{[/{people}/{id}/{property}],methods=[DELETE],produces=[application/hal+json || application/json]}
{[/{people}/{id}/{property}],methods=[GET],produces=[application/x-spring-data-compact+json || text/uri-list]}
{[/{people}/{id}/{property}],methods=[PATCH || PUT || POST],consumes=[application/json || application/x-spring-data-compact+json || text/uri-list],produces=[application/hal+json || application/json]}
{[/{people}/{id}/{property}/{propertyId}],methods=[DELETE],produces=[application/hal+json || application/json]}
{[/{people}/search],methods=[HEAD],produces=[application/hal+json || application/json]}
{[/{people}/search],methods=[GET],produces=[application/hal+json || application/json]}
{[/{people}/search],methods=[OPTIONS],produces=[application/hal+json || application/json]}
{[/{people}/search/{search}],methods=[GET],produces=[application/hal+json || application/json]}
{[/{people}/search/{search}],methods=[GET],produces=[application/x-spring-data-compact+json]}
{[/{people}/search/{search}],methods=[OPTIONS],produces=[application/hal+json || application/json]}
{[/{people}/search/{search}],methods=[HEAD],produces=[application/hal+json || application/json]}

如果我们知道该特定文件的_id,我们就可以获得一份人员文件。

我们只能使用搜索API来获取_embedded json对象。例如,

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends MongoRepository<Person, String> {

      List<Person> findAllByIdIsNotNull();

}

由于_id在MongoDB中不为空,如果我们点击此端点http://localhost:8080/people/search/findAllByIdIsNotNull,我们可以获取所有文档。答复如下。

{
 "_embedded": {
    "people": [{
            "firstName": "N1",
            "lastName": "N2",
            "_links": {
                "self": {
                    "href": "http://localhost:8080/people/59d54d2bb13148a7e93953c8"
                },
                "person": {
                    "href": "http://localhost:8080/people/59d54d2bb13148a7e93953c8"
                }
            }
        }
 }

获取个人文档的最佳方法是使用一些json解析apis,如shell脚本中的jq或java等中的gson / jackson。

希望这有帮助。