你好!
我回到本教程中,教您如何使用Spring Boot开发REST API。正如我之前说的,本教程分为5个部分,如下表所示:
部分 | 内容 |
---|---|
第01部分 | Application Startup |
第02部分 | Settings and Database |
第03部分 | API Implementation |
第04部分 | Tests + Coverage |
第05部分 | Swagger文档 |
可以预期,从最后一部分,您将学习以下内容:
- 将Swagger用于项目文档。
记住,在本教程中使用以下工具:
- JDK 17
- Smart
- 失眠
- Maven
- mySQL数据库
我们到达了教程的最后一部分。在previous part中,您学会了如何进行单元和集成测试。除了检查执行的测试的覆盖范围外。
在最后一部分中,这将有点短,您将学习如何记录API。
当我们与API合作时,我们必须牢记其他开发人员需要访问它。不一定是您的源代码,而是对请求的响应。
因此,我们需要创建文档,以视觉上显示系统的所有可能访问路线及其响应。
步骤01-添加了SpringDoc库
而闻名要在我们的应用程序中使用它,我们将不得不在pom.xml
文件中添加Spring Doc依赖关系:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.2</version>
</dependency>
通过执行此操作(并重新启动您的服务器),我们可以访问URL http://localhost:8080/swagger-ui/index.html,并且将看到以下屏幕:
您可以看到,Swagger已经映射了我们在系统中创建的所有路线,但是它没有完成所有必要的信息以进行良好的文档。例如,单击以查看有关以下途径的更多信息:
它仅表示响应将是字符串,而不是显示实际内容。因此,我们将必须对控制器进行以下修改:
package com.simplelibrary.simplelibraryAPI.controller;
import com.simplelibrary.simplelibraryAPI.dto.BookRequestDTO;
import com.simplelibrary.simplelibraryAPI.dto.BookResponseDTO;
import com.simplelibrary.simplelibraryAPI.model.Book;
import com.simplelibrary.simplelibraryAPI.service.BookService;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriComponentsBuilder;
import java.io.IOException;
@RestController
@RequestMapping("books")
public class BookController {
@Autowired
private BookService bookService;
@ApiResponse(
content = { @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = BookResponseDTO.class)))})
@GetMapping
public ResponseEntity<Page<BookResponseDTO>> getAllBooks(@PageableDefault(size=10, sort={"title"}) Pageable pagination) throws IOException {
var page = bookService.getAllBooks(pagination);
return ResponseEntity.ok(page);
}
@ApiResponse(
content = { @Content(mediaType = "application/json", schema = @Schema(implementation = BookResponseDTO.class))})
@GetMapping("/{id}")
public ResponseEntity show(@PathVariable Long id){
var book = bookService.show(id);
return ResponseEntity.ok(book);
}
@ApiResponse(
content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Book.class))})
@PostMapping
public ResponseEntity store(@RequestBody @Valid BookRequestDTO bookRequest, UriComponentsBuilder uriBuilder) throws IOException {
var book = bookService.store(bookRequest);
var uri = uriBuilder.path("/books/{id}").buildAndExpand(book.getId()).toUri();
return ResponseEntity.created(uri).body(book);
}
@ApiResponse(
content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Book.class))})
@PutMapping("/{id}")
public ResponseEntity update(@PathVariable Long id, @RequestBody @Valid BookRequestDTO bookRequest){
var book = bookService.update(id, bookRequest);
return ResponseEntity.ok(book);
}
@DeleteMapping("/{id}")
public ResponseEntity delete(@PathVariable Long id){
bookService.delete(id);
return ResponseEntity.noContent().build();
}
}
请注意,已经添加了@ApiResponse
注释。在其中,我们将每个路线的响应内容放在其中。因此,检查相同的路线时:
您可以通过单击尝试按钮来从此屏幕创建请求:
我们在本教程中学到的知识
好吧,我希望您喜欢春季靴子教程的这部续集。我相信,借助这5个部分获得的知识,您可以开始朝着创建更强大的应用程序迈进。
不要仅仅坚持本教程中教授的内容,请自由修改此处添加的任何代码。您可以与我联系的任何问题!
再次记住,您可以找到HERE
的完整项目