日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用Spring Boot和MongoDB创建REST API

發布時間:2023/12/3 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Spring Boot和MongoDB创建REST API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring Boot是一個自以為是的框架,可簡化Spring應用程序的開發。 它使我們擺脫了復雜配置文件的束縛,并幫助我們創建了不需要外部servlet容器的獨立Spring應用程序。

這聽起來實在令人難以置信,但Spring Boot確實可以完成所有這一切

這篇博客文章演示了實現REST API多么容易,該API為保存到MongoDB數據庫中的待辦事項提供CRUD操作。

讓我們開始創建我們的Maven項目。

注意:這篇博客文章假定您已經安裝了MongoDB數據庫。 如果尚未執行此操作,則可以按照博客文章中的說明進行操作: 使用MongoDB訪問數據 。

創建我們的Maven項目

我們可以按照以下步驟創建Maven項目:

  • 使用spring-boot-starter-parent POM作為我們的Maven項目的父POM。 這可以確保我們的項目從Spring Boot繼承合理的默認設置。
  • 將Spring Boot Maven插件添加到我們的項目中。 這個插件使我們可以將應用程序打包到可執行的jar文件中,將其打包到war存檔中,然后運行該應用程序。
  • 配置我們項目的依賴項。 我們需要配置以下依賴項:
    • spring-boot-starter-web依賴關系提供了Web應用程序的依賴關系。
    • spring-data-mongodb依賴項提供了與MongoDB文檔數據庫的集成。
  • 啟用S??pring Boot的Java 8支持。
  • 配置我們的應用程序的主類。 此類負責配置和啟動我們的應用程序。
  • pom.xml文件的相關部分如下所示:

    <properties><!-- Enable Java 8 --><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- Configure the main class of our Spring Boot application --><start-class>com.javaadvent.bootrest.TodoAppConfig</start-class> </properties><!-- Inherit defaults from Spring Boot --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.1.9.RELEASE</version> </parent><dependencies><!-- Get the dependencies of a web application --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Data MongoDB--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-mongodb</artifactId></dependency> </dependencies><build><plugins><!-- Spring Boot Maven Support --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins> </build>

    補充閱讀:

    • Spring Boot參考手冊:9.1.1 Maven安裝
    • Spring Boot參考手冊:12.1 Maven
    • Spring Boot Maven插件–用法

    讓我們繼續前進,了解如何配置應用程序。

    配置我們的應用

    我們可以按照以下步驟配置Spring Boot應用程序:

  • 創建一個com.javaadvent.bootrest包的TodoAppConfig類。
  • 啟用S??pring Boot自動配置。
  • 配置Spring容器以掃描從com.javaadvent.bootrest包的子包中找到的組件。
  • 將main()方法添加到TodoAppConfig類,并通過運行我們的應用程序來實現。
  • TodoAppConfig類的源代碼如下所示:

    package com.javaadvent.bootrest;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration;@Configuration @EnableAutoConfiguration @ComponentScan public class TodoAppConfig {public static void main(String[] args) {SpringApplication.run(TodoAppConfig.class, args);} }

    現在,我們已經創建了配置類,用于配置和運行我們的Spring Boot應用程序。 由于從類路徑中找到了MongoDB jar,因此Spring Boot使用其默認設置來配置MongoDB連接。

    補充閱讀:

    • Spring Boot參考手冊:13.2定位主應用程序類
    • Spring Boot參考手冊:14.配置類
    • @EnableAutoConfiguration批注的Javadoc
    • Spring Boot參考手冊:15.自動配置
    • SpringApplication類的Javadoc
    • Spring Boot參考手冊:27.2.1連接到MongoDB數據庫

    讓我們繼續并實現我們的REST API。

    實施我們的REST API

    我們需要實現一個REST API,為待辦事項提供CRUD操作。 我們的REST API的要求是:

    • 發送到URL'/ api / todo'的POST請求必須使用從請求正文中找到的信息來創建新的todo條目,并返回創建的todo條目的信息。
    • 發送到網址“ / api / todo / {id}”的DELETE請求必須刪除從網址中找到ID的待辦事項,并返回已刪除的待辦事項的信息。
    • 發送到URL'/ api / todo'的GET請求必須返回從數據庫中找到的所有todo條目。
    • 發送到URL'/ api / todo / {id}'的GET請求必須返回其id從URL中找到的todo條目的信息。
    • 發送到url'/ api / todo / {id}'的PUT請求必須使用從請求正文中找到的信息來更新現有待辦事項的信息,并返回更新后的待辦事項的信息。

    我們可以通過執行以下步驟來滿足這些要求:

  • 創建包含單個待辦事項條目信息的實體。
  • 創建用于將待辦事項保存到MongoDB數據庫并從中查找待辦事項的存儲庫。
  • 創建負責將DTO映射到域對象,反之亦然的服務層。 服務層的目的是將域模型與Web層隔離。
  • 創建用于處理HTTP請求并將正確的響應返回給客戶端的控制器類。
  • 注意:此示例非常簡單,我們可以將存儲庫注入到控制器中。 但是,由于在實現實際應用程序時這不是可行的策略,因此我們將在Web層和存儲庫層之間添加一個服務層。

    讓我們開始吧。

    創建實體

    我們需要創建包含單個待辦事項條目信息的實體類。 我們可以按照以下步驟進行操作:

  • 將id , description和title字段添加到創建的實體類中。 通過使用@Id注釋對id字段進行注釋來配置實體的id字段。
  • 指定常量( MAX_LENGTH_DESCRIPTION和MAX_LENGTH_TITLE ),這些常量指定描述和標題字段的最大長度。
  • 將靜態生成器類添加到實體類。 此類用于創建新的Todo對象。
  • 向實體類添加一個update()方法。 如果給定有效值作為方法參數,則此方法僅更新實體的標題和說明 。
  • Todo類的源代碼如下所示:

    import org.springframework.data.annotation.Id;import static com.javaadvent.bootrest.util.PreCondition.isTrue; import static com.javaadvent.bootrest.util.PreCondition.notEmpty; import static com.javaadvent.bootrest.util.PreCondition.notNull;final class Todo {static final int MAX_LENGTH_DESCRIPTION = 500;static final int MAX_LENGTH_TITLE = 100;@Idprivate String id;private String description;private String title;public Todo() {}private Todo(Builder builder) {this.description = builder.description;this.title = builder.title;}static Builder getBuilder() {return new Builder();}//Other getters are omittedpublic void update(String title, String description) {checkTitleAndDescription(title, description);this.title = title;this.description = description;}/*** We don't have to use the builder pattern here because the constructed * class has only two String fields. However, I use the builder pattern * in this example because it makes the code a bit easier to read.*/static class Builder {private String description;private String title;private Builder() {}Builder description(String description) {this.description = description;return this;}Builder title(String title) {this.title = title;return this;}Todo build() {Todo build = new Todo(this);build.checkTitleAndDescription(build.getTitle(), build.getDescription());return build;}}private void checkTitleAndDescription(String title, String description) {notNull(title, "Title cannot be null");notEmpty(title, "Title cannot be empty");isTrue(title.length() <= MAX_LENGTH_TITLE,"Title cannot be longer than %d characters",MAX_LENGTH_TITLE);if (description != null) {isTrue(description.length() <= MAX_LENGTH_DESCRIPTION,"Description cannot be longer than %d characters",MAX_LENGTH_DESCRIPTION);}} }

    補充閱讀:

    • 第2項:面對許多構造函數參數時,請考慮構造器

    讓我們繼續并創建與MongoDB數據庫通信的存儲庫。

    創建存儲庫

    我們必須創建存儲庫接口,該接口用于將Todo對象保存到MondoDB數據庫并從中檢索Todo對象。

    如果我們不想使用Java 8對Spring Data的支持,則可以通過創建擴展CrudRepository <T,ID>接口的接口來創建存儲庫。 但是,由于我們要使用Java 8支持,因此必須遵循以下步驟:

  • 創建一個擴展Repository <T,ID>接口的接口。
  • 將以下存儲庫方法添加到創建的接口:
  • void delete(刪除Todo的方法)刪除作為方法參數給出的todo條目。
  • List <Todo> findAll()方法返回從數據庫中找到的所有待辦事項條目。
  • Optional <Todo> findOne(String id)方法返回單個待辦事項的信息。 如果未找到待辦事項,則此方法返回一個空的Optional 。
  • Todo save(保存Todo的方法)將新的todo項保存到數據庫中,并返回保存的todo項。
  • TodoRepository接口的源代碼如下所示:

    import org.springframework.data.repository.Repository;import java.util.List; import java.util.Optional;interface TodoRepository extends Repository<Todo, String> {void delete(Todo deleted);List<Todo> findAll();Optional<Todo> findOne(String id);Todo save(Todo saved); }

    補充閱讀:

    • CrudRepository <T,ID>接口的Javadoc
    • Repository <T,ID>接口的Javadoc
    • Spring Data MongoDB參考手冊:5.使用Spring Data存儲庫
    • Spring Data MongoDB參考手冊:5.3.1對存儲庫定義進行微調

    讓我們繼續并創建示例應用程序的服務層。

    創建服務層

    首先 ,我們必須創建一個服務接口,為待辦事項提供CRUD操作。 TodoService接口的源代碼如下所示:

    import java.util.List;interface TodoService {TodoDTO create(TodoDTO todo);TodoDTO delete(String id);List<TodoDTO> findAll();TodoDTO findById(String id);TodoDTO update(TodoDTO todo); }

    TodoDTO類是DTO,其中包含單個todo條目的信息。 在創建示例應用程序的Web層時,我們將詳細討論它。

    其次 ,我們必須實現TodoService接口。 我們可以按照以下步驟進行操作:

  • 通過使用構造函數注入將我們的??存儲庫注入服務類。
  • 將私有Todo findTodoById(String id)方法添加到服務類,并通過返回找到的Todo對象或拋出TodoNotFoundException來實現它。
  • 在服務類中添加一個私有TodoDTO convertToDTO(Todo model)方法,并通過將Todo對象轉換為TodoDTO對象并返回創建的對象來實現該方法。
  • 添加一個私有List <TodoDTO> convertToDTOs(List <Todo>模型)并通過將Todo對象的列表轉換成TodoDTO對象的列表并返回創建的列表來實現它。
  • 實現TodoDTO create(TodoDTO todo)方法。 此方法創建一個新的Todo對象,將創建的對象保存到MongoDB數據庫,并返回創建的todo條目的信息。
  • 實現TodoDTO delete(String id)方法。 此方法找到刪除的Todo對象,將其刪除,然后返回刪除的Todo條目的信息。 如果未找到具有給定id的Todo對象,則此方法將拋出TodoNotFoundException 。
  • 實現List <TodoDTO> findAll()方法。 此方法從數據庫檢索所有Todo對象,將它們轉換為TodoDTO對象列表,然后返回創建的列表。
  • 實現TodoDTO findById(String id)方法。 此方法從數據庫中查找Todo對象,將其轉換為TodoDTO對象,然后返回創建的TodoDTO對象。 如果未找到待辦事項條目,則此方法將拋出TodoNotFoundException 。
  • 實現TodoDTO update(TodoDTO todo)方法。 此方法從數據庫中查找更新的Todo對象,更新其標題和說明 ,保存并返回更新的信息。 如果未找到更新的Todo對象,則此方法將拋出TodoNotFoundException 。
  • MongoDBTodoService的源代碼如下所示:

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List; import java.util.Optional;import static java.util.stream.Collectors.toList;@Service final class MongoDBTodoService implements TodoService {private final TodoRepository repository;@AutowiredMongoDBTodoService(TodoRepository repository) {this.repository = repository;}@Overridepublic TodoDTO create(TodoDTO todo) {Todo persisted = Todo.getBuilder().title(todo.getTitle()).description(todo.getDescription()).build();persisted = repository.save(persisted);return convertToDTO(persisted);}@Overridepublic TodoDTO delete(String id) {Todo deleted = findTodoById(id);repository.delete(deleted);return convertToDTO(deleted);}@Overridepublic List findAll() {List todoEntries = repository.findAll();return convertToDTOs(todoEntries);}private List convertToDTOs(List models) {return models.stream().map(this::convertToDTO).collect(toList());}@Overridepublic TodoDTO findById(String id) {Todo found = findTodoById(id);return convertToDTO(found);}@Overridepublic TodoDTO update(TodoDTO todo) {Todo updated = findTodoById(todo.getId());updated.update(todo.getTitle(), todo.getDescription());updated = repository.save(updated);return convertToDTO(updated);}private Todo findTodoById(String id) {Optional result = repository.findOne(id);return result.orElseThrow(() -> new TodoNotFoundException(id));}private TodoDTO convertToDTO(Todo model) {TodoDTO dto = new TodoDTO();dto.setId(model.getId());dto.setTitle(model.getTitle());dto.setDescription(model.getDescription());return dto;} }

    現在,我們已經創建了示例應用程序的服務層。 讓我們繼續創建控制器類。

    創建控制器類

    首先 ,我們需要創建DTO類,其中包含單個待辦事項的信息,并指定用于確保僅將有效信息保存到數據庫的驗證規則。 TodoDTO類的源代碼如下所示:

    import org.hibernate.validator.constraints.NotEmpty;import javax.validation.constraints.Size;public final class TodoDTO {private String id;@Size(max = Todo.MAX_LENGTH_DESCRIPTION)private String description;@NotEmpty@Size(max = Todo.MAX_LENGTH_TITLE)private String title;//Constructor, getters, and setters are omitted }

    補充閱讀:

    • Hibernate Validator 5.0.3參考手冊

    其次 ,我們必須創建控制器類來處理發送到我們的REST API的HTTP請求,并將正確的響應發送回客戶端。 我們可以按照以下步驟進行操作:

  • 使用構造函數注入將服務注入控制器。
  • 將create()方法添加到我們的控制器并通過以下步驟實現它:
  • 從請求正文中讀取創建的待辦事項條目的信息。
  • 驗證創建的待辦事項條目的信息。
  • 創建一個新的待辦事項條目并返回創建的待辦事項條目。 將響應狀態設置為201。
  • 通過將已刪除的待辦事項條目的ID委托給我們的服務來實現delete()方法,并返回已刪除的待辦事項條目。
  • 通過從數據庫中找到待辦事項并返回找到的待辦事項來實現findAll()方法。
  • 通過從數據庫中找到待辦事項并返回找到的待辦事項來實現findById()方法。
  • 通過執行以下步驟來實現update()方法:
  • 從請求正文中讀取更新的待辦事項條目的信息。
  • 驗證更新的待辦事項條目的信息。
  • 更新待辦事項的信息,并返回更新后的待辦事項。
  • 創建一個@ExceptionHandler方法,如果未找到todo條目(拋出TodoNotFoundException ),則將響應狀態設置為404。
  • TodoController類的源代碼如下所示:

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid; import java.util.List;@RestController @RequestMapping("/api/todo") final class TodoController {private final TodoService service;@AutowiredTodoController(TodoService service) {this.service = service;}@RequestMapping(method = RequestMethod.POST)@ResponseStatus(HttpStatus.CREATED)TodoDTO create(@RequestBody @Valid TodoDTO todoEntry) {return service.create(todoEntry);}@RequestMapping(value = "{id}", method = RequestMethod.DELETE)TodoDTO delete(@PathVariable("id") String id) {return service.delete(id);}@RequestMapping(method = RequestMethod.GET)List<TodoDTO> findAll() {return service.findAll();}@RequestMapping(value = "{id}", method = RequestMethod.GET)TodoDTO findById(@PathVariable("id") String id) {return service.findById(id);}@RequestMapping(value = "{id}", method = RequestMethod.PUT)TodoDTO update(@RequestBody @Valid TodoDTO todoEntry) {return service.update(todoEntry);}@ExceptionHandler@ResponseStatus(HttpStatus.NOT_FOUND)public void handleTodoNotFound(TodoNotFoundException ex) {} }

    注意:如果驗證失敗,我們的REST API將驗證錯誤作為JSON返回,并將響應狀態設置為400。如果您想了解更多有關此信息,請閱讀標題為: Spring從Trenches:將驗證添加到REST API的博客文章。 。

    這就對了。 現在,我們已經創建了一個REST API,它為待辦事項提供CRUD操作并將其保存到MongoDB數據庫中。 讓我們總結一下我們從此博客文章中學到的知識。

    摘要

    這篇博客文章教會了我們三件事:

    • 我們可以通過僅聲明兩個依賴項來獲得Maven所需的依賴項: spring-boot-starter-web和spring-data-mongodb 。
    • 如果我們對Spring Boot的默認配置感到滿意,則可以使用其自動配置支持并將新的jar“丟棄”到類路徑中來配置Web應用程序。
    • 我們學習了如何創建一個簡單的REST API,該API將信息保存到MongoDB數據庫并從中查找信息。

    您可以從Github獲得此博客文章的示例應用程序 。

    翻譯自: https://www.javacodegeeks.com/2014/12/creating-a-rest-api-with-spring-boot-and-mongodb-2.html

    總結

    以上是生活随笔為你收集整理的使用Spring Boot和MongoDB创建REST API的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。