Описание аннотации API устарело

В Swagger @Api description устарел.

Устарело. Не используется в версии 1.5.X, сохранено для устаревшей поддержки.

Есть ли более новый способ предоставления описания?


person Soumitri Pattnaik    schedule 28.06.2016    source источник
comment
Какую версию вы имеете в виду?   -  person Jens    schedule 28.06.2016
comment
github.com/swagger-api/swagger-core/wiki/ Annotations-1.5.X или, возможно, docs.swagger.io/swagger-core/current/apidocs/index.html?io/ может помочь   -  person Jordi Castilla    schedule 28.06.2016
comment
@Jens Я использую версию 2.4.0 (springfox)   -  person Soumitri Pattnaik    schedule 28.06.2016
comment
Как я вижу, только три атрибута устарели   -  person Jens    schedule 28.06.2016
comment
@Jens, если он устарел, значит, есть более новая альтернатива, что это?   -  person Soumitri Pattnaik    schedule 28.06.2016
comment
Устаревший означает, что он больше не будет использоваться в более поздних версиях. Это не обязательно означает, что есть более новая альтернатива.   -  person dunni    schedule 28.06.2016
comment
@dunni о, понятно, спасибо :)   -  person Soumitri Pattnaik    schedule 28.06.2016
comment
@SoumitriPattnaik, ты нашел какое-нибудь решение?   -  person Kick    schedule 04.04.2019


Ответы (5)


Я нашел два решения для приложения Spring Boot:

1. Swagger 2 на основе:

Во-первых, используйте метод tags для указания определений тегов в вашем bean-компоненте Docket:

@Configuration
@EnableSwagger2
public class Swagger2Config {
    
    public static final String TAG_1 = "tag1";

    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors.basePackage("my.package")).build()
                .tags(new Tag(TAG_1, "Tag 1 description."))
                // Other tags here...
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("My API").version("1.0.0").build();
    }
}

После этого в RestController просто добавьте аннотацию @Api с одним (или несколькими) вашими тегами:

@Api(tags = { SwaggerConfig.TAG_1 })
@RestController
@RequestMapping("tag1-domain")
public class Tag1RestController { ... }

2. на основе Swagger 3 (OpenAPI):

Точно так же используйте метод addTagsItem для указания определений тегов в вашем bean-компоненте OpenAPI:

@Configuration
public class OpenApiConfig {

    public static final String TAG_1 = "tag1";

    @Bean
    public OpenAPI customOpenAPI() {
        final Info info = new Info()
                .title("My API")
                .description("My API description.")
                .version("1.0.0");

        return new OpenAPI().components(new Components())
                .addTagsItem(createTag(TAG_1, "Tag 1 description."))
                // Other tags here...
                .info(info);
    }

    private Tag createTag(String name, String description) {
        final Tag tag = new Tag();
        tag.setName(name);
        tag.setDescription(description);
        return tag;
    }

}

Наконец, в RestController просто добавьте аннотацию @Tag:

@Tag(name = OpenApiConfig.TAG_1)
@RestController
@RequestMapping("tag1-domain")
public class Tag1RestController { ... }
person falvojr    schedule 28.02.2018
comment
Описание тега, не отображаемого в пользовательском интерфейсе swagger - person Kick; 04.04.2019
comment
@Kick - да, если вы используете достаточно новую версию Swagger (например, 2.9.x) - person Roddy of the Frozen Peas; 26.04.2019
comment
@falvojr - Отлично. Однако есть ли способ уменьшить размер шрифта? - person Pra_A; 16.05.2019
comment
Отлично, это сработало и для меня. Однако мне интересно, есть ли способ добавить разрывы строк в описании. Я попытался поставить \n и ‹br› - person Venky; 13.09.2019
comment
Это помогло для версии 2.9.2! - person Anand Varkey Philips; 18.11.2019
comment
Разве вы не сталкиваетесь с new io.swagger.annotations.Tag - это абстрактно, не может быть создано? Должно быть springfox.documentation.service.Tag. - person Zon; 16.01.2020
comment
Да, я использую springfox.documentation.service.Tag, следуя сигнатуре tags (метод компоновщика). - person falvojr; 17.01.2020
comment
поэтому я должен добавить описание внутри Swagger2Config. Итак, если у меня есть 20 контроллеров, я должен поместить их все в Swagger2Config. ИМХО было бы лучше иметь его внутри одного контроллера - person Mariano Cali; 23.04.2021

Это правильный способ добавить описание в документацию Swagger API для Swagger v1.5:

@Api(tags = {"Swagger Resource"})
@SwaggerDefinition(tags = {
    @Tag(name = "Swagger Resource", description = "Write description here")
})
public class ... {
}
person zappee    schedule 07.05.2018
comment
Это выглядит как хороший способ сделать это, но что, если вы повторно используете тег в нескольких API? куда бы вы поместили SwaggerDefinition? Я попытался поместить его в свой bean-компонент SwaggerConfig, но это не было принято во внимание. У меня работал только программный способ. - person Tristan; 11.10.2018
comment
@zhuguowei, вы нашли способ использовать его в 2.9.2? Помогите мне, если вы знаете, как использовать его в версии 2.9.2. - person LEVEL; 27.07.2019
comment
@ShivarajaHN, пожалуйста, посмотрите ответ falvojr - person zhuguowei; 28.07.2019
comment
К сожалению, это решение не работает, см. github.com/swagger-api/swagger. -ядро/проблемы/1476. - person Dmitriy Popov; 30.01.2020
comment
Проблема GitHub для этого решения не работает: github.com/swagger-api/swagger- ядро/вопросы/3737 - person M. Justin; 25.11.2020
comment
идея правильная, но не реализация, для правильной реализации см. 1. Swagger 2 based: из falvojr - установите @Api(tags = {"User"}) - этот пользователь появляется на странице Swagger и в SwaggerConfig.java для нового Docket() после сборки добавить .tags(new Tag("User", "some user actions"); - person Sasha Bond; 05.03.2021

Причина, по которой он устарел, заключается в том, что предыдущие версии Swagger (1.x) использовали аннотацию описания @Api для группировки операций.

В спецификации Swagger 2.0 было создано понятие tags, которое сделало более гибкий механизм группировки. Чтобы соответствовать API, поле description было сохранено, чтобы упростить обновление, но правильный способ добавить описание — через атрибут tags, который должен ссылаться на аннотацию @Tag. @Tag позволяет предоставить описание, а также внешние ссылки и т. д.

person fehguy    schedule 30.06.2016
comment
Пример был бы очень признателен! - person Harihara_K; 03.03.2021

Я пробовал вышеуказанные решения, но они не работали для меня.

Чтобы добавить заголовок и описание к документации, вы создаете объекты ApiInfo и Contact, как показано в примере ниже. Затем вы просто добавляете объект apiInfo в свой Swagger Docket.

import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;

@EnableSwagger2
@Configuration
public class SwaggerConfig {

  private Contact contact = new Contact("", "", "");
  private ApiInfo apiInfo = new ApiInfo(
      "Backoffice API documentation",
      "This page documents Backoffice RESTful Web Service Endpoints",
      "1.0",
      "",
      contact,
      "",
      "");

  @Bean
  public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo)
        .select()
        .apis(RequestHandlerSelectors.basePackage(
            PaymentsController.class.getPackage().getName()
        ))
        .paths(PathSelectors.ant("/api/v1/payments" + "/**"))
        .build()
        .useDefaultResponseMessages(false)
        .globalOperationParameters(
            newArrayList(new ParameterBuilder()
                .name("x-authorization")
                .description("X-Authorization")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build()));
  }
}

Вышеприведенный код создает описание, как на скриншоте ниже.

скриншот страницы swagger-ui, созданный кодом выше

person davrog10    schedule 23.05.2019
comment
Я добавил ваше изображение - ожидает проверки... но, похоже, вы уже ответили здесь на другой вопрос! Вопрос касается атрибута description аннотации @Api, который отображался для каждого класса/тега/группы точек входа, а не для всего API приложения, как на скриншоте. - person OzgurH; 15.10.2019

Я тоже задавался вопросом, что делать с использованием устаревшего description (появляющегося в виде предупреждений в моей среде IDE).

Что ж, при ближайшем рассмотрении оказалось, что description нигде не используется в пользовательском интерфейсе Swagger. После этого решение (в нашем случае*) стало очевидным: просто удалить эти описания.

(* В нашей кодовой базе с чистыми именами классов и методов и т. д., конечно, не было необходимости в таких «описаниях API» для читателя кода. Я бы допустил наличие этих битов шума, связанного со Swagger, в кодовой базе, если бы они добавили некоторая ценность в пользовательском интерфейсе Swagger, но поскольку они этого не сделали, единственно разумным было выбросить их.)

person Jonik    schedule 26.10.2018