使用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

原文地址:https://www.cnblogs.com/xsj891107/p/8434918.html