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. C#基础 out传值

    public void Out(out int a, out int b) {//out相当于return返回值 //可以返回多个值 //拿过来变量名的时候,里面默认为空值 a=1; b=2; } s ...

  2. .Net MVC 前台验证跟后台验证

    前台验证: 首先你得有一个参数类,参数类代码如下 验证标记总结 [DisplayName("邮箱:")]        [Required(ErrorMessage = " ...

  3. Java多线程——线程之间的协作

    Java多线程——线程之间的协作 摘要:本文主要学习多线程之间是如何协作的,以及如何使用wait()方法与notify()/notifyAll()方法. 部分内容来自以下博客: https://www ...

  4. LN : leetcode 258 Add Digits

    lc 258 Add Digits lc 258 Add Digits Given a non-negative integer num, repeatedly add all its digits ...

  5. 处理sql锁死问题

    --SQL Server死锁的查询方法:   exec master.dbo.p_lockinfo 0,0; ---显示死锁的进程,不显示正常的进程   exec master.dbo.p_locki ...

  6. 北大ACM(POJ1018-Communication System)

    Question:http://poj.org/problem?id=1018 问题点:枚举. Memory: 564K Time: 329MS Language: C++ Result: Accep ...

  7. dutacm.club_1087_Common Substrings_(KMP)_(结合此题通俗理解kmp的next数组)

    1087: Common Substrings Time Limit:3000/1000 MS (Java/Others)   Memory Limit:163840/131072 KB (Java/ ...

  8. Protecting resources in iPhone and iPad apps

    源码:https://github.com/lingzhao/EncryptedResourceDemo UPDATE: The example project has been updated to ...

  9. #NOIP前数学知识总结

    我好菜啊…… 欧拉函数 欧拉函数φ(n),是小于n且和n互质的正整数(包括1)的个数. 性质: 1.对于质数n: φ(n)=n-1 2..对于n=pk φ(n)=(p-1)*pk-1 3.积性函数的性 ...

  10. chr()返回值是当前整数对应的 ASCII 字符。

    #chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符.#返回值是当前整数对应的 ASCII 字符.1 import random input_m =10 ...