让我们使用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について知っていること
实施概览
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 的注册。
完成注册后,点击“创建集群”。

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

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

集群建设即将开始。


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

用户创建了

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

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

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

点击[添加我的数据]

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

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

一旦完成MongoDB的安装设置,就到此为止了。
使用SpringBoot进行环境配置。
访问Spring Initializr网站,按照图片中的模板进行设置,然后点击Generate按钮下载压缩文件。

请解压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的配置值。



在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中启动应用程序。


或者在CUI下执行以下内容来启动。
./gradlew bootRun
注册用户
首先让我们注册用户。
通过将以下JSON对象作为主体发出POST请求到 http://localhost:8080/candidate/,
注册用户信息将返回在响应中。
{
"name": "Axel",
"exp": "10",
"email": "axel@example.com"
}

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

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

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


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


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