Получение пустого пользовательского интерфейса swagger в приложении spring MVC

#java #spring #spring-mvc #swagger

#java #spring #spring-mvc #swagger

Вопрос:

Я могу получить ответ json от localhost:8080/v2/api-docs но когда я пытаюсь загрузить swagger-ui на localhost:8080/swagger-ui.html , он показывает swagger-ui без указанного там api.

развязность-пользовательский интерфейс

swagger-json

Комментарии:

1. Загрузите swagger-ui с открытой консолью JS — сообщает ли он о каких-либо ошибках?

2. Отредактируйте свой вопрос и опубликуйте свой класс SwaggerConfig. Кроме того, если вы используете Spring Security, проверьте свою конфигурацию Cors.

Ответ №1:

Возможно, вы сможете просмотреть следующие моменты в своем проекте:

Проверьте, есть ли у вас аннотации Spring и Swagger в вашем классе контроллера.

 @RestController
@RequestMapping(value = "/order")
@ApiResponses({
        @ApiResponse(code = 400, message = "Bad Request"),
        @ApiResponse(code = 401, message = "Unauthorized"),
        @ApiResponse(code = 403, message = "Forbidden"),
        @ApiResponse(code = 404, message = "Not Found"),
        @ApiResponse(code = 415, message = "Unsupported Media Type"),
        @ApiResponse(code = 422, message = "Unprocessable Entity")
})
public class OrderController {
    // Controller class code.
}
  

Затем проверьте, есть ли в вашей конечной точке также аннотации:

 @PostMapping(
        value = "/v1/new",
        consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE
)
@ApiOperation(
        value = "Create new Order.",
        consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
)
public ResponseEntity<String> newOrder(
        @RequestHeader(name = "Content-type", defaultValue = "application/json;charset=UTF-8")
        @NonNull final String contentType,
        @RequestBody @NotNull @Valid OrderDTO orderDTO) {
    // Endpoint code.
}
  

Конфигурация Swagger with SpringBoot:

 @EnableSwagger2
public class SwaggerConfig {

    private static final String BASE_PACKAGE = "com.example.api";

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage(BASE_PACKAGE))
            .paths(any())
            .build()
            .consumes(getContentType())
            .produces(getContentType())
            .apiInfo(getApiInfo());
    }

    private Set<String> getContentType() {
        final HashSet<String> mediaType = new HashSet<>();
        mediaType.add(MediaType.APPLICATION_JSON_UTF8_VALUE);
        return mediaType;
    }

    private ApiInfo getApiInfo() {
        return new ApiInfo(
            //...
        );
    }
}
  

Конфигурация Swagger without SpringBoot:

Добавьте: @Configuration , extends WebMvcConfigurationSupport и переопределите метод addResourceHandlers в вашем классе SwaggerConfig.

 @Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {

    @Bean
    public Docket api() {
        //...
    }

    private ApiInfo getApiInfo() {
        return new ApiInfo(
            //...
        );
    }

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
            .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
            .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}
  

Ссылка:
Настройка Swagger 2 с помощью Spring REST API

Комментарии:

1. Да, у меня есть тот же код, который вы предложили @Juliano. Я думаю, что проблема не в конфигурации swagger. Я предполагаю, что мой api-docs json неверен, поскольку в json-ответе swagger есть тег json (см. iamge swagger-json). спасибо за ответ, Джулиано

Ответ №2:

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

введите описание изображения здесь