【问题标题】:MongoDB exposed as REST with SpringBoot: what is the return object typeMongoDB 使用 SpringBoot 暴露为 REST:返回对象类型是什么
【发布时间】:2018-03-16 09:06:31
【问题描述】:

通过使用 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”部分。

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

【问题讨论】:

    标签: mongodb rest spring-boot


    【解决方案1】:

    这些只是 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 解析 api,例如 shell 脚本中的 jq 或 java 中的 gson/jackson 等。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多