让我们使用SpringBoot和MongoDB来创建REST API吧

这篇文章是关于什么的?

这是一个使用MongoDB作为数据存储并使用SpringBoot构建REST API的实操页面。由于这是一个快速的培训内容,我们将简单地概述步骤,并通过模仿实现以便轻松体验。

以下是几乎完全复制粘贴的内容。由于我想使用Gradle,所以稍微修改了一下内容。
https://stackabuse.com/spring-data-mongodb-tutorial/

前提 tí) – prerequisite

    Javaを触ったことがあること
    IntelliJ IDEAを使えること
    REST APIとは何かを知っていること
    Postmanを使えること

    この辺り参考にしてください:https://qiita.com/notch0314/items/97c7d1bb565fdae4a712

    NoSQL・MongoDBについて知っていること

实施概览

使用SpringBoot创建REST API。
使用MongoDB作为数据存储,根据请求对MongoDB的数据执行CRUD操作。

完成物已经上传到下面的GitHub,请参考如果有任何问题。
https://github.com/theMistletoe/MongoDB-SpringBoot-sample

亲手操作的步骤

MongoDB的安装配置

前往 https://account.mongodb.com/account/register 进行 MongoDB 的注册。

完成注册后,点击“创建集群”。

image.png

既然想要免费,让我们选择FREE吧。

image.png

集群的设置。没有必要特别更改。

image.png

集群建设即将开始。

image.png

image.png

选择密码验证,输入用户名和密码以创建用户。请记住这个用户名和密码,后面会用到。

image.png

用户创建了

image.png

下一步是设置NetworkAccess。
由于可以定义基于IP地址的白名单,因此让我们为练习设置接受任意IP地址。
(请不要在生产环境中使用,因为这个练习设置的安全性较低)

image.png

点击[允许从任何地方访问]并确认。

image.png

让我们开始创建数据库吧。
点击Clusters的COLLECTIONS。

image.png

点击[添加我的数据]

image.png

让我们在数据库名称中输入”jobs”,在集合名称中输入”candidate”,然后创建。

image.png

数据库创建后,控制台界面将会显示。
随后的数据更新将会在这里呈现。

image.png

一旦完成MongoDB的安装设置,就到此为止了。

使用SpringBoot进行环境配置。

访问Spring Initializr网站,按照图片中的模板进行设置,然后点击Generate按钮下载压缩文件。

image.png

请解压zip文件,并在IntelliJ中打开。
首先打开application.properties文件,然后设置MongoDB的访问信息。


spring.data.mongodb.uri=mongodb+srv://user:<password>@cluster0.ayoho.mongodb.net/<dbname>?retryWrites=true&w=majority

您可以在MongoDB控制台中获取有关spring.data.mongodb.uri的配置值。

image.png

image.png

image.png

在MongoDB安装设置时,请使用设定的密码和数据库名(如果按照步骤进行设置,则数据库名将为「jobs」)。

Java程序实现

接下来,我们开始编写Java代码吧。
由于我们不会涉及具体实现的解释,所以请您在编写代码时解决不明确的问题。
代码的布局可以放置在任何地方,但请参考package信息或参考GitHub。

package com.example.mongoDBsample.entity;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "candidate")
public class Candidate {
    @Id
    private String id;

    private String name;

    private double exp;

    @Indexed(unique = true)
    private String email;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getExp() {
        return exp;
    }

    public void setExp(double exp) {
        this.exp = exp;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
package com.example.mongoDBsample.repository;

import com.example.mongoDBsample.entity.Candidate;
import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.List;
import java.util.Optional;

public interface CandidateRepository extends MongoRepository<Candidate, String> {
    Optional<Candidate> findByEmail(String email);

    List<Candidate> findByExpGreaterThanEqual(double exp);

    List<Candidate> findByExpBetween(double from, double to);
}
package com.example.mongoDBsample.controller;

import com.example.mongoDBsample.exception.ResourceNotFoundException;
import com.example.mongoDBsample.entity.Candidate;
import com.example.mongoDBsample.repository.CandidateRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/candidate")
public class CandidateController {

    @Autowired
    private CandidateRepository candidateRepository;

    @PostMapping
    @ResponseStatus(code = HttpStatus.CREATED)
    public Candidate add(@RequestBody Candidate candidate) {
        return candidateRepository.save(candidate);
    }

    @GetMapping
    public List<Candidate> getAll() {
        return candidateRepository.findAll();
    }

    @GetMapping(value = "/{id}")
    public Candidate getOne(@PathVariable String id) {
        return candidateRepository.findById(id)
                .orElseThrow(() -> new ResourceNotFoundException());
    }

    @PutMapping(value = "/{id}")
    public Candidate update(@PathVariable String id, @RequestBody Candidate updatedCandidate) {
        Candidate candidate = candidateRepository.findById(id)
                .orElseThrow(() -> new ResourceNotFoundException());
        candidate.setName(updatedCandidate.getName());
        candidate.setExp(updatedCandidate.getExp());
        candidate.setEmail(updatedCandidate.getEmail());
        return candidateRepository.save(candidate);
    }

    @DeleteMapping(value = "/{id}")
    @ResponseStatus(code = HttpStatus.ACCEPTED)
    public void delete(@PathVariable String id) {
        Candidate candidate = candidateRepository.findById(id)
                .orElseThrow(() -> new ResourceNotFoundException());
        candidateRepository.delete(candidate);
    }

    @GetMapping("/searchByEmail")
    public Candidate searchByEmail(@RequestParam(name = "email") String email) {
        return candidateRepository.findByEmail(email)
                .orElseThrow(() -> new ResourceNotFoundException());

    }

    @GetMapping("/searchByExp")
    public List<Candidate> searchByExp(@RequestParam(name = "expFrom") Double expFrom, @RequestParam(name = "expTo", required = false) Double expTo) {
        List<Candidate> result = new ArrayList<>();
        if (expTo != null) {
            result = candidateRepository.findByExpBetween(expFrom, expTo);
        } else {
            result = candidateRepository.findByExpGreaterThanEqual(expFrom);
        }
        return result;
    }
}
package com.example.mongoDBsample.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException() {
    }
}

确认实施

我们已经完成了这个实现,所以现在让我们来检查一下是否可以通过API进行数据访问。

让我们在IntelliJ中启动应用程序。

image.png

image.png

或者在CUI下执行以下内容来启动。

./gradlew bootRun

注册用户

首先让我们注册用户。
通过将以下JSON对象作为主体发出POST请求到 http://localhost:8080/candidate/,
注册用户信息将返回在响应中。

{
    "name": "Axel",
    "exp": "10",
    "email": "axel@example.com"
}
image.png

查看MongoDB的控制台,可以确认数据已经被添加。

image.png

查看用户

当发送GET请求到http://localhost:8080/candidate时,将返回所有注册用户的记录。

image.png

ユーザー情報を更新する

在PUT请求中,将更新后的JSON对象作为请求体附加到http://localhost:8080/candidate/{用户id},即可更新注册信息。

image.png

image.png

删除用户

您可以通过向http://localhost:8080/candidate/{用户id}发送DELETE请求来删除用户。

image.png

image.png


这就是以上的内容。

我认为我已经能够实现使用MongoDB/SpringBoot构建基本的后端,以便可以使用数据存储的REST API。现在我们可以尝试扩展它,或者与前端进行协作,创建一个完整的应用程序!

bannerAds