• [JavaEE] Create API documents with Swagger


    We mainly need to modify our Model and REST endpoint code to enable swagger Document.

    model/Book.java: By doing this, we can get each model defination in swagger

    rest/BookRespostory.java: By doing this, we can get each endpoint of API

    BoodEndpoint.java:

    package com.pluralsight.bookstore.rest;
    
    import com.pluralsight.bookstore.model.Book;
    import com.pluralsight.bookstore.repository.BookRepository;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import io.swagger.annotations.ApiResponse;
    import io.swagger.annotations.ApiResponses;
    
    import javax.inject.Inject;
    import javax.validation.constraints.Min;
    import javax.ws.rs.*;
    import javax.ws.rs.core.Context;
    import javax.ws.rs.core.Response;
    import javax.ws.rs.core.UriInfo;
    import java.net.URI;
    import java.util.List;
    
    import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
    import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
    
    
    @Path("/books")
    @Api("Book")
    public class BookEndpoint {
    
        // ======================================
        // =          Injection Points          =
        // ======================================
    
        @Inject
        private BookRepository bookRepository;
    
        // ======================================
        // =          Business methods          =
        // ======================================
    
        @POST
        @Consumes(APPLICATION_JSON)
        @ApiOperation(value = "Create a book given a Json Book reforestation")
        @ApiResponses({
                @ApiResponse(code = 201, message = "The book was created"),
                @ApiResponse(code = 415, message = "Format error")
        })
        public Response createBook(Book book, @Context UriInfo uriInfo) {
            book = bookRepository.create(book);
            URI createdURI = uriInfo.getBaseUriBuilder().path(book.getId().toString()).build();
            return Response.created(createdURI).build();
        }
    
        @GET
        @Path("/{id : \d+}")
        @Produces(APPLICATION_JSON)
        @ApiOperation(value = "Returns a book given an id", response = Book.class)
        @ApiResponses({
                @ApiResponse(code = 200, message = "Book found"),
                @ApiResponse(code = 404, message = "Book not found")
        })
        public Response getBook(@PathParam("id") @Min(1) Long id) {
            Book book = bookRepository.find(id);
    
            if (book == null)
                return Response.status(Response.Status.NOT_FOUND).build();
    
            return Response.ok(book).build();
        }
    
        @DELETE
        @Path("/{id : \d+}")
        @ApiOperation(value = "Delete a book given an id")
        @ApiResponses({
                @ApiResponse(code = 204, message = "Book has been deleted"),
                @ApiResponse(code = 400, message = "Invalid param id"),
                @ApiResponse(code = 500, message = "Book not exists")
        })
        public Response deleteBook(@PathParam("id") @Min(1) Long id) {
            bookRepository.delete(id);
            return Response.noContent().build();
        }
    
    }

    model/Book.java:

    package com.pluralsight.bookstore.model;
    
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    
    import javax.persistence.*;
    import javax.validation.constraints.Min;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Past;
    import javax.validation.constraints.Size;
    import java.util.Date;
    
    /**
     * @author Antonio Goncalves
     *         http://www.antoniogoncalves.org
     *         --
     */
    
    @Entity
    @ApiModel(description = "Book resource representation")
    public class Book {
    
        // ======================================
        // =             Attributes             =
        // ======================================
    
        @Id
        @GeneratedValue
        @ApiModelProperty("Identifier")
        private Long id;
    
        @Column(length = 200)
        @NotNull
        @Size(min = 1, max = 200)
        @ApiModelProperty("Title of the book")
        private String title;
    
        @Column(length = 10000)
        @Size(min = 1, max = 10000)
        @ApiModelProperty("Description of the book")
        private String description;
    
       
    
        // ======================================
        // =            Constructors            =
        // ======================================
    
        public Book() {
        }
    
        public Book(String isbn, String title, Float unitCost, Integer nbOfPages, com.pluralsight.bookstore.model.Language language, Date publicationDate, String imageURL, String description) {
            this.isbn = isbn;
            this.title = title;
            this.unitCost = unitCost;
            this.nbOfPages = nbOfPages;
            this.language = language;
            this.publicationDate = publicationDate;
            this.imageURL = imageURL;
            this.description = description;
        }
    
    
    }

    In the end, the Swagger.json looks like this:

    {
      "swagger" : "2.0",
      "info" : {
        "description" : "BookStore APIs exposed from a Java EE back-end to an Angular front-end",
        "version" : "1.0.0",
        "title" : "BookStore APIs",
        "contact" : {
          "name" : "Antonio Goncalves",
          "url" : "https://app.pluralsight.com/library/search?q=Antonio+Goncalves",
          "email" : "antonio.goncalves@gmail.com"
        }
      },
      "host" : "localhost:8080",
      "basePath" : "/bookstore-back/api",
      "tags" : [ {
        "name" : "Book"
      } ],
      "schemes" : [ "http", "https" ],
      "paths" : {
        "/books" : {
          "get" : {
            "tags" : [ "Book" ],
            "summary" : "Returns all the books",
            "description" : "",
            "operationId" : "getBooks",
            "produces" : [ "application/json" ],
            "responses" : {
              "200" : {
                "description" : "Books found",
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/definitions/Book"
                  }
                }
              },
              "204" : {
                "description" : "No books found"
              }
            }
          },
          "post" : {
            "tags" : [ "Book" ],
            "summary" : "Creates a book given a JSon Book representation",
            "description" : "",
            "operationId" : "createBook",
            "consumes" : [ "application/json" ],
            "parameters" : [ {
              "in" : "body",
              "name" : "body",
              "description" : "Book to be created",
              "required" : true,
              "schema" : {
                "$ref" : "#/definitions/Book"
              }
            } ],
            "responses" : {
              "201" : {
                "description" : "The book is created"
              },
              "415" : {
                "description" : "Format is not JSon"
              }
            }
          }
        },
        "/books/count" : {
          "get" : {
            "tags" : [ "Book" ],
            "summary" : "Returns the number of books",
            "description" : "",
            "operationId" : "countBooks",
            "produces" : [ "text/plain" ],
            "responses" : {
              "200" : {
                "description" : "Number of books found",
                "schema" : {
                  "type" : "integer",
                  "format" : "int64"
                }
              },
              "204" : {
                "description" : "No books found"
              }
            }
          }
        },
        "/books/{id}" : {
          "get" : {
            "tags" : [ "Book" ],
            "summary" : "Returns a book given an id",
            "description" : "",
            "operationId" : "getBook",
            "produces" : [ "application/json" ],
            "parameters" : [ {
              "name" : "id",
              "in" : "path",
              "required" : true,
              "type" : "integer",
              "minimum" : 1.0,
              "pattern" : "\d+",
              "format" : "int64"
            } ],
            "responses" : {
              "200" : {
                "description" : "Book found",
                "schema" : {
                  "$ref" : "#/definitions/Book"
                }
              },
              "400" : {
                "description" : "Invalid input. Id cannot be lower than 1"
              },
              "404" : {
                "description" : "Book not found"
              }
            }
          },
          "delete" : {
            "tags" : [ "Book" ],
            "summary" : "Deletes a book given an id",
            "description" : "",
            "operationId" : "deleteBook",
            "parameters" : [ {
              "name" : "id",
              "in" : "path",
              "required" : true,
              "type" : "integer",
              "minimum" : 1.0,
              "pattern" : "\d+",
              "format" : "int64"
            } ],
            "responses" : {
              "204" : {
                "description" : "Book has been deleted"
              },
              "400" : {
                "description" : "Invalid input. Id cannot be lower than 1"
              },
              "500" : {
                "description" : "Book not found"
              }
            }
          }
        }
      },
      "definitions" : {
        "Book" : {
          "type" : "object",
          "required" : [ "isbn", "title" ],
          "properties" : {
            "id" : {
              "type" : "integer",
              "format" : "int64",
              "description" : "Identifier"
            },
            "title" : {
              "type" : "string",
              "description" : "Title of the book",
              "minLength" : 1,
              "maxLength" : 200
            },
            "description" : {
              "type" : "string",
              "description" : "Summary describing the book",
              "minLength" : 1,
              "maxLength" : 10000
            },
            "unitCost" : {
              "type" : "number",
              "format" : "float",
              "description" : "Unit cost",
              "minimum" : 1.0
            },
            "isbn" : {
              "type" : "string",
              "description" : "ISBN number",
              "minLength" : 1,
              "maxLength" : 50
            },
            "publicationDate" : {
              "type" : "string",
              "format" : "date-time",
              "description" : "Date in which the book has been published"
            },
            "nbOfPages" : {
              "type" : "integer",
              "format" : "int32",
              "description" : "Number of pages"
            },
            "imageURL" : {
              "type" : "string",
              "description" : "URL of the image cover"
            },
            "language" : {
              "type" : "string",
              "description" : "Language in which the book has been written",
              "enum" : [ "ENGLISH", "FRENCH", "SPANISH", "PORTUGUESE", "ITALIAN", "FINISH", "GERMAN", "DEUTSCH", "RUSSIAN" ]
            }
          },
          "description" : "Book resource representation"
        }
      }
    }
  • 相关阅读:
    sql 内链接
    使用python 写一个自动windows桌面壁纸的程序
    在windows使用pyinstall 打包 flask 再使用nsis软件打包成安装包
    超微主板ibm密码
    jenkins邮件模板
    gp集群常用命令
    shell小知识
    Linux配置免密
    文件基础命令
    华为初识命令
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9428045.html
Copyright © 2020-2023  润新知