********** РЕШЕНИЕ 1: (с использованием групп) **********
Просто определите несколько Docket
bean длякаждая группа, и вы получите логическую группировку в соответствии с вашими потребностями.
@Bean
public Docket api1() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("users")
.select()
.paths(PathSelectors.ant("/api/users/**"))
.build();
}
@Bean
public Docket api2() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("products")
.select()
.paths(PathSelectors.ant("/api/products/**"))
.build();
}
Теперь вы получите две группы в вашем пользовательском интерфейсе, как показано ниже.
![groups](https://i.stack.imgur.com/SAd3q.png)
********** РЕШЕНИЕ 2: (с использованием тегов) **********
Вы не делаетенеобходимо определить несколько Docket
bean, достаточно только одного.
@Bean
public Docket api1() {
// here tags is optional, it just adds a description in the UI
// by default description is class name, so if you use same tag using
// `@Api` on different classes it will pick one of the class name as
// description, so better define your own description for them
return new Docket(DocumentationType.SWAGGER_2)
.tags(new Tag("users", "users related"),
new Tag("products", "products related"))
.select()
.apis(RequestHandlerSelectors.basePackage("com.github"))
.build();
}
После этого вам просто нужно аннотировать ваши методы API с помощью @Api
(на уровне класса, по умолчанию для всех методов) или @ApiOperation
(на уровне метода переопределяет значение на уровне класса).
@RestController
@RequestMapping("/api/products")
@Api(tags = "products")
public class ProductController {
@ApiOperation(value = "", tags = "products")
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public Product createProduct(@RequestBody Product product) {
return product;
}
}
![tags](https://i.stack.imgur.com/Cvlkg.png)
Теги в @ApiOperation
(или в @Api
) будутработать также на контроллере, т.е. метод в разных классах контроллеров (или самом контроллере), помеченных данным тегом, будет сгруппирован вместе.