zoukankan      html  css  js  c++  java
  • 使用REST访问MongoDB数据(Accessing MongoDB Data with REST)

    本指南将指导您创建一个应用程序,该应用程序通过基于超媒体的RESTful前端来访问基于文档的数据。

    你会建立什么

    您将构建一个Spring应用程序,让您使用Spring Data REST 创建和检索Person对象存储在MongoDB NoSQL数据库Spring Data REST采用Spring HATEOASSpring Data MongoDB的特性,并将它们自动组合在一起。

    环境依赖

    在pom文件引入spring-boot-starter-data-mongodb依赖:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-rest</artifactId>
            </dependency>

    创建一个域对象

    创建一个新的域对象来呈现一个人。

    package hello;
    
    import org.springframework.data.annotation.Id;
    
    public class Person {
        @Id
        private String id;
    
        private String firstName;
        private String lastName;
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    }

    Person有一个名字和姓氏。还有一个id对象被配置为自动生成,所以你不必处理它。

    创建一个Person存储库

    接下来,您需要创建一个简单的存储库。

    package hello;
    
    import org.springframework.data.mongodb.repository.MongoRepository;
    import org.springframework.data.repository.query.Param;
    import org.springframework.data.rest.core.annotation.RepositoryRestResource;
    
    import java.util.List;
    
    @RepositoryRestResource(collectionResourceRel = "people", path = "people")
    public interface PersonRepository extends MongoRepository<Person, String> {
    
        List<Person> findByLastName(@Param("name") String name);
    }

    这个存储库是一个接口,将允许您执行涉及Person对象的各种操作它通过继承MongoRepository,来获得这些操作;MongoRepository继承自Spring Data Commons中定义PagingAndSortingRepository接口。

    在运行时,Spring Data REST将自动创建该接口的实现。然后,它将使用@RepositoryRestResource注释来指导Spring MVC创建RESTful端点/people

    @RepositoryRestResource对于被输出的存储库不是必需的。它仅用于更改出口的细节,例如使用/people而不是默认值/persons

    在这里,您还定义了一个自定义查询来检索Person基于lastName 对象列表。在本指南中,您将看到如何进一步调用它。

    测试应用程序

    现在应用程序正在运行,您可以测试它。您可以使用任何您希望的REST客户端。

    首先,看到顶级服务。

    在这里,你第一眼瞥见此服务器提供的功能。有一个people链接位于http://localhost:8080/people它有一些选项,比如?page?size?sort

    Spring Data REST使用HAL格式来输出JSON。它提供连接数据的链接。

    目前没有元素,因此没有分页数据。是时候创造一个新的Person了!

    使用Google的Postman

    使用 curl。

    $ curl -i -X POST -H "Content-Type:application/json" -d "{ "firstName" : "Frodo", "lastName" : "Baggins" }" http://localhost:8080/people

    • -i:确保您可以看到包含标题的响应消息。新创建的Person的URI 被显示

    • -X POST:表明这是使用POST方式创建请求

    • -H "Content-Type:application/json":设置内容类型,以便应用程序知道负载包含一个JSON对象

    • -d '{ "firstName" : "Frodo", "lastName" : "Baggins" }':是被发送的数据

    从这里你可以查询所有people:

    people对象是一个有Frodo的列表。注意它是如何包含自我链接的。

    你可以直接查询单个记录:

    这可能看起来纯粹是基于web的,但在幕后,它正在与您的MongoDB数据库对话。

    在本指南中,只有一个域对象。对于域对象相互关联的更复杂的系统,Spring Data REST将提供额外的链接,以帮助导航到连接的记录。

    查找所有的自定义查询:

    您可以看到包含HTTP查询参数name的查询的URL。这与嵌入在接口中的注释@Param("name")匹配。

    使用findByLastName查询

    因为在代码中,你将它定义为返回List<Person>,它将返回所有结果。如果你定义它只返回Person,它会选择一个Person对象返回。由于这可能是不可预知的,所以对可以返回多个条目的查询,你不能这样做。

    你可以发出PUTPATCHDELETE REST调用,来替换、更新、删除现有记录。

    PUT 替换整个记录。未提供的字段将被替换nullPATCH 可用于更新项目的子集。

    您可以删除记录:

    这种超媒体驱动接口的一个方便的方面是,你可以使用curl(或者其他 REST客户端)来发现所有 RESTful端点。没有必要与客户交换正式的合同或接口文档。

    概要

    恭喜!您刚刚开发了基于超媒体的 RESTful前端和基于MongoDB的后端的应用程序

    参考资料:Accessing MongoDB Data with REST

    源码:https://gitee.com/SevenDayBabyface/demo

  • 相关阅读:
    获取ServletContext方法
    linux下echo命令详解
    非滤波单目视觉SLAM系统研究
    单目深度估计(Monocular Depth Estimation)之摄像机运动对深度估计的影响
    typedef函数指针用法
    REMODE+ORBSLAM运行配置(2) REMODE和编译后的ORB ros工程利用节点实现通讯
    跟我一起学习Makefile
    ubuntu下通过命令打开多个终端并在相应终端执指令
    REMODE+ORBSLAM运行配置(1) 把ORB编译成ROS工程
    ROS节点与运行
  • 原文地址:https://www.cnblogs.com/xsj891107/p/8434918.html
Copyright © 2011-2022 走看看