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"
}
}
}

[JavaEE] Create API documents with Swagger的更多相关文章

  1. 在ASP.NET Core Web API上使用Swagger提供API文档

    我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...

  2. Core Web API上使用Swagger提供API文档

    在ASP.NET Core Web API上使用Swagger提供API文档   我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的AP ...

  3. ASP.NET Core Web API中使用Swagger

    本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger   在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...

  4. JAVAEE 7 api.chm

    JAVAEE 7 api.chm 链接:https://pan.baidu.com/s/1LUD3oam5B-Hp8tdpfQYk2w 提取码:x1kc

  5. 2种方式解决nginx负载下的Web API站点里swagger无法使用

    Web API接口站点,引入了swagger来实时生成在线的api文档,也便于api接口的在线测试.swagger:The World's Most Popular Framework for API ...

  6. gRPC helloworld service, RESTful JSON API gateway and swagger UI

    概述 本篇博文完整讲述了如果通过 protocol buffers 定义并启动一个 gRPC 服务,然后在 gRPC 服务上提供一个 RESTful JSON API 的反向代理 gateway,最后 ...

  7. WebApi生成在线API文档--Swagger

    1.前言 1.1 SwaggerUI SwaggerUI 是一个简单的Restful API 测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON 配置显示API. 项目本身仅仅也只依赖 ...

  8. ASP.NET Web API 中使用 swagger 来管理 API 文档

    本文以 ASP.NET Web API 为后台框架,利用 EF6 连接 postgreSQL 数据库,使用 swagger 来生成 REST APIs文档.文章分二个部分,第一部分主要讲如何用 EF6 ...

  9. Asp.Net Web Api中使用Swagger

    关于swagger 设计是API开发的基础.Swagger使API设计变得轻而易举,为开发人员.架构师和产品所有者提供了易于使用的工具. 官方网址:https://swagger.io/solutio ...

随机推荐

  1. Spring.Net学习笔记(1)-容器的使用

    一.下载地址: http://www.springframework.net/download.html 二.相关程序集 Spring.Net容器定义在程序集Spring.Core.dll中,它依赖于 ...

  2. php数据类型的转换

    1.强制类型的转换 setType('变量','值') 值:可以是8大数据类型的任何一种 变量:(8大数据类型)需要转换的变量 $var="123abc"; setType($va ...

  3. VC++常见错误原因解析--error LNK2019: 无法解析的外部符号 "public: void __thiscall

    根据个人遇到这个错误时的记录,原因可以分为一下几种: 原因一: 只是在.h里面声明了某个方法, 没有在cpp里面实现 . 具体讲,有时候在头文件中声明了需要的方法,确实忘记了在源文件中实现: 有时候在 ...

  4. React 篇 Search Bar and content Table

    我们要构建一个模块,其中包含一个内容显示的表格,然后上面有一个提供Search的栏位,并对Search中输入栏进行监听,当有改变的时候,触发Search然后对内容表中的内容进行过滤. Demo Lin ...

  5. Android 6.0权限分组

    Android系统从6.0开始将权限分为一般权限和危险权限,一般权限指不涉及用户隐私的一些权限,比如Internet权限.危险权限指涉及获取用户隐私的一些操作所需要的权限,比如读取用户地理位置的权限. ...

  6. Android中 string.xml资源 如何添加参数?

    在android 开发,我们通常会用string.xml资源去设置textview等控件的字符串.而值一般是与程序的运行结果无关的. 但有时需要根据运行的结果来显示到控件中,这时字符串资源就不能写死了 ...

  7. 【PostgreSQL-9.6.3】使用pg_settings表查看参数的生效条件

    PostgreSQL数据库的配置参数都在postgresql.conf文件中,此文件的目录为数据库的数据目录($PGDATA).这些参数有些是直接修改就可以生效,有些需要重启数据库才能生效,而有些根本 ...

  8. GLPI开源资产管理系统

    GLPI一款资产管理系统,功能比较强大,东西比较多,放张图,有机会再深入研究

  9. 系统异常 NSException.h

    FOUNDATION_EXPORT NSExceptionName const NSGenericException; FOUNDATION_EXPORT NSExceptionName const ...

  10. WebService接口数据传输加密

    1.加密流程 客服端--->加密文本------>服务端接收到加密文本,通过固定加密密文进行解密,然后做相应处理------------>返回结果 2.固定密文创建 密文创建有很多种 ...