конечные точки сгруппированы по ресурсам чванство аннотации? - PullRequest
0 голосов
/ 28 мая 2018

Я использую Spring для разработки REST API.И у меня есть некоторый API, где есть много конечных точек.Когда я открываю пользовательский интерфейс Swagger, он выглядит упакованным.

Я только что прочитал эту статью и увидел, что мы можем группировать конечные точки на основе уровня ресурса.

Я просто хочучтобы узнать, как этого можно добиться с помощью аннотаций Swagger в Spring.Я признателен, если кто-то может описать с помощью примера.

А также мне просто интересно, можем ли мы перегруппировать (группирование более высокого уровня) группы, которые мы выводим вышеописанным способом?

1 Ответ

0 голосов
/ 28 мая 2018

********** РЕШЕНИЕ 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

********** РЕШЕНИЕ 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

Теги в @ApiOperation (или в @Api) будутработать также на контроллере, т.е. метод в разных классах контроллеров (или самом контроллере), помеченных данным тегом, будет сгруппирован вместе.

...