Ошибка при загрузке swagger-ui.html весной (5.0.0.RELEASE) mvc

Не удалось разрешить ссылку из-за: Не удалось разрешить указатель: / определения / Ошибка не существует в документе

Я перешел по этой ссылке http://www.baeldung.com/swagger-2-documentation-for-spring-rest-api, но появляется ошибка выше, когда я добавляю метод globalResponseMessage () для пользовательского ответного сообщения. Я не могу понять, в чем причина. Пожалуйста, помогите .... TIA

 @Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build()
            .apiInfo(apiInfo())
            .consumes(getContentType())
            .produces(getContentType())
            .useDefaultResponseMessages(false)
            .globalResponseMessage(RequestMethod.GET, newArrayList(
                    new ResponseMessageBuilder()
                            .code(500).message("500 message")
                            .responseModel(new ModelRef("Error")).build(),
                    new ResponseMessageBuilder()
                            .code(403)
                            .message("Forbidden!!!!!")
                            .build()));
}

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


person Abdullah Al Mamun    schedule 31.03.2018    source источник
comment
У меня была такая же проблема, и я нашел ее в качестве предложения - github.com/springfox/springfox/issues / 1443 перед тестированием. Я обсуждаю это со своей командой, и нам не нужно было отменять ответ по умолчанию, поэтому я просто удалил его и не тестировал предложение от hydra и jonaskoperdraat   -  person Georgi Stoyanov    schedule 03.04.2018


Ответы (2)


У вас есть две альтернативы:

1) Замените «Ошибка» на «строку» (нижний регистр).

new ResponseMessageBuilder()
                        .code(500).message("500 message")
                        .responseModel(new ModelRef("string")).build(),

2) Замените «Ошибка» именем класса, который вы используете для информации об ошибке в теле ответа (или определите для этого класс Error). Пример:

new ResponseMessageBuilder()
                        .code(500).message("500 message")
                        .responseModel(new ModelRef("ErrorInfo")).build(),

В этом примере класс ErrorInfo должен находиться в пути к классам вашего веб-приложения (может находиться в библиотеке, совместно используемой несколькими веб-приложениями). Пример:

@XmlRootElement
public class ErrorInfo {

    private String url;

    @ApiModelProperty(notes = "HTTP Status Code")
    private int statusCode;

    @ApiModelProperty(notes = "HTTP Reason Phrase")
    private String reasonPhrase;

    @ApiModelProperty(notes = "Mensage to the user")
    private String message;

    @ApiModelProperty(notes = "Ticket created on IT help desk if applicable", required = false)
    private String helpDeskTicket;

    @ApiModelProperty(notes = "Debug information (e.g., stack trace), not visible if runtime environment is 'production'", required = false)
    private String debugInfo;

    public ErrorInfo() {
        // required by Jackson deserialization.
    }

    // ... other constructors, get/set methods...

}
person Paulo Merson    schedule 24.04.2018

Вам следует использовать классы примитивов, например String. В случае использования пользовательских классов (например, Error) вы должны разрешить эту модель, добавив additionalModels(typeResolver.resolve (CustomResponseClass.class)) в определение Docket. Вот код, который отлично работает:

@Autowired
TypeResolver typeResolver;

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
          .useDefaultResponseMessages(false)
          .directModelSubstitute(Object.class, java.lang.Void.class)
          .select()
          .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
          .build()
          .pathMapping("/")
          .apiInfo(apiInfo())
          .additionalModels(typeResolver.resolve (MensagemVo.class) )
          .globalResponseMessage(RequestMethod.GET,
                newArrayList(new ResponseMessageBuilder()
                            .code(500)
                            .message("Execution error message")
                            .responseModel(new ModelRef("String"))
                            .build(),
                      new ResponseMessageBuilder()
                            .code(422)
                            .message("Validation error message")
                            .responseModel(new ModelRef("MensagemVo"))
                            .build())
          );
}

Где TypeResolve из пакета com.fasterxml.classmate.

Изображение результата: результат документации

person Emerson Oliveira    schedule 31.03.2021