Эта демонстрация в основном демонстрирует, как интегрировать сторонний swagger, чтобы заменить собственный swagger и украсить стиль документа. В этой демонстрации используетсяswagger-bootstrap-uiЗапустите проект, посетите адресhttp://${host}:${port}/doc.html
Улучшения пользовательского интерфейса
swagger-bootstrap-ui не только удовлетворяет перечисленным выше функциям, но также предоставляет функции улучшения документа. Эти функции недоступны в официальном swagger-ui. Каждая расширенная функция практична, учитывая фактические потребности разработчиков в разработке. Это незаменимая функция. , в основном в том числе:
-
Персонализированная конфигурация: с помощью персонализированных элементов конфигурации пользовательского интерфейса можно настроить соответствующую отображаемую информацию пользовательского интерфейса.
-
Автономный документ: в соответствии со стандартной спецификацией, сгенерированный автономный онлайн-документ уценки, разработчик может скопировать и создать документ интерфейса уценки и преобразовать его в html или pdf с помощью других сторонних инструментов преобразования уценки, которые также могут отказаться от компонента swagger2markdown.
-
Сортировка интерфейса: Начиная с версии 1.8.5, пользовательский интерфейс поддерживает функцию сортировки интерфейса.Например, функция регистрации в основном включает в себя несколько шагов.Сортировка интерфейсов может быть реализована в соответствии с правилами сортировки интерфейсов, предоставленными swagger-bootstrap-ui, а интерфейс работа пошаговая, что удобно, стыковка интерфейса с другими разработчиками
Особенности пользовательского интерфейса
- Документ отображается в виде уценки, а адрес запроса, тип, параметр запроса, пример и параметр ответа документа отображаются по порядку слоями Интерфейс документа понятен с первого взгляда, что удобно для разработчиков соединять.
- В дополнение к автоматическому анализу параметров панель онлайн-отладки имеет цветовую кодировку для необходимых элементов и поддерживает клавишу табуляции для быстрого ввода вверх и вниз для переключения.Тип заголовка запроса Content-Type можно настроить во время отладки.
- Персонализированные элементы конфигурации, адрес интерфейса поддержки, атрибут описания интерфейса, расширение пользовательского интерфейса и другие персонализированные функции конфигурации.
- Сортировка интерфейса, группировка поддержки и функция сортировки интерфейса
- Поддержка автономного экспорта документов уценки, а автономные документы также можно просматривать в Интернете.
- Отладочная информация кэшируется глобально и сохраняется после обновления страницы, что удобно для отладки разработчиками.
- Продемонстрируйте функциональность моделей Swagger с помощью более удобного для пользователя компонента таблицы дерева
- Содержимое ответа можно просмотреть в полноэкранном режиме, в случае большого количества содержимого ответа его можно просмотреть в полноэкранном режиме, что удобно для отладки и копирования.
- Документы могут отображать несколько интерфейсных документов в режиме с несколькими вкладками.
- Тип запроса строки параметров запроса, требуется ли заполнять цветовое различие
- Примерно подсчитайте количество различных типов интерфейсов на главной странице.
- Поддержка интерфейса онлайн-поиска
- Левое и правое меню и страницы содержимого можно свободно перетаскивать по ширине
- Поддержка функции пользовательских глобальных параметров, домашняя страница включает заголовок и запрос двух типов.
- Поддержка интернационализации i18n, в настоящее время поддерживает: упрощенный китайский, традиционный китайский, английский
- Поддержка аннотаций JSR-303
использовать
Зависимости Maven
Поскольку это расширенный пакет пользовательского интерфейса Springfox-swagger, основные функции по-прежнему зависят от Swagger, и необходимо ввести пакет jar Springfox-swagger.
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
Затем введите jar-пакет SwaggerBootstrapUi.
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
Написать файл конфигурации Swagger2Config
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.bycdao.cloud"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("swagger-bootstrap-ui RESTful APIs")
.description("swagger-bootstrap-ui")
.termsOfServiceUrl("http://localhost:8999/")
.version("1.0")
.build();
}
}
ApiResponse.java
package cn.haoxiaoyong.swagger.enhance.common;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author haoxiaoyong on 2020/5/14 下午 3:55
* e-mail: hxyHelloWorld@163.com
* github: https://github.com/haoxiaoyong1014
* Blog: www.haoxiaoyong.cn
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "通用PI接口返回", description = "Common Api Response")
public class ApiResponse<T> implements Serializable {
private static final long serialVersionUID = -8987146499044811408L;
/**
* 通用返回状态
*/
@ApiModelProperty(value = "通用返回状态", required = true)
private Integer code;
/**
* 通用返回信息
*/
@ApiModelProperty(value = "通用返回信息", required = true)
private String message;
/**
* 通用返回数据
*/
@ApiModelProperty(value = "通用返回数据", required = true)
private T data;
}
User.java
package cn.haoxiaoyong.swagger.enhance.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author haoxiaoyong on 2020/5/14 下午 3:56
* e-mail: hxyHelloWorld@163.com
* github: https://github.com/haoxiaoyong1014
* Blog: www.haoxiaoyong.cn
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "用户实体", description = "User Entity")
public class User {
private static final long serialVersionUID = 5057954049311281252L;
/**
* 主键id
*/
@ApiModelProperty(value = "主键id", required = true)
private Integer id;
/**
* 用户名
*/
@ApiModelProperty(value = "用户名", required = true)
private String name;
/**
* 工作岗位
*/
@ApiModelProperty(value = "工作岗位", required = true)
private String job;
}
UserController.java
package cn.haoxiaoyong.swagger.enhance.controller;
import cn.haoxiaoyong.swagger.enhance.common.ApiResponse;
import cn.haoxiaoyong.swagger.enhance.entity.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @author haoxiaoyong on 2020/5/14 下午 3:54
* e-mail: hxyHelloWorld@163.com
* github: https://github.com/haoxiaoyong1014
* Blog: www.haoxiaoyong.cn
*/
@RestController
@RequestMapping("/user")
@Api(tags = "1.0.0-SNAPSHOT", description = "用户管理", value = "用户管理")
@Slf4j
public class UserController {
@GetMapping
@ApiOperation(value = "条件查询(DONE)", notes = "备注")
@ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名", defaultValue = "xxx")})
public ApiResponse<User> getByUserName(String username) {
log.info("多个参数用 @ApiImplicitParams");
return ApiResponse.<User>builder().code(200).message("操作成功").data(new User(1, username, "JAVA")).build();
}
@GetMapping("/{id}")
@ApiOperation(value = "主键查询(DONE)", notes = "备注")
@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户编号",dataType = "int")})
public ApiResponse<User> get(@PathVariable Integer id) {
log.info("单个参数用 @ApiImplicitParam");
return ApiResponse.<User>builder().code(200).message("操作成功").data(new User(id, "u1", "p1")).build();
}
@DeleteMapping("/{id}")
@ApiOperation(value = "删除用户(DONE)", notes = "备注")
@ApiImplicitParam(name = "id", value = "用户编号",dataType = "int")
public void delete(@PathVariable Integer id) {
log.info("单个参数用 ApiImplicitParam");
}
@PostMapping
@ApiOperation(value = "添加用户(DONE)")
public User post(@RequestBody User user) {
log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam");
return user;
}
@PostMapping("/multipar")
@ApiOperation(value = "添加用户(DONE)")
public List<User> multipar(@RequestBody List<User> user) {
log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam");
return user;
}
@PostMapping("/array")
@ApiOperation(value = "添加用户(DONE)")
public User[] array(@RequestBody User[] user) {
log.info("如果是 POST PUT 这种带 @RequestBody 的可以不用写 @ApiImplicitParam");
return user;
}
@PutMapping("/{id}")
@ApiOperation(value = "修改用户(DONE)")
public void put(@PathVariable Long id, @RequestBody User user) {
log.info("如果你不想写 @ApiImplicitParam 那么 swagger 也会使用默认的参数名作为描述信息 ");
}
@PostMapping("/{id}/file")
@ApiOperation(value = "文件上传(DONE)")
public String file(@PathVariable Long id, @RequestParam("file") MultipartFile file) {
log.info(file.getContentType());
log.info(file.getName());
log.info(file.getOriginalFilename());
return file.getOriginalFilename();
}
}
пользовательский интерфейс