Swagger OpenAPI 3 не отображается в Springboot 2, если добавить конвертер с поддержкой WebMvcConfigurationSupport - PullRequest
1 голос
/ 09 октября 2019

У меня есть приложение springboot с файлом swagger. Я использую любой плагин Maven и он работает.

enter image description here

Мой файл pom.xml:

    <dependency>
        <groupId>io.swagger.core.v3</groupId>
        <artifactId>swagger-core</artifactId>
        <version>2.0.9</version>
    </dependency>
    <dependency>
        <groupId>io.swagger.core.v3</groupId>
        <artifactId>swagger-annotations</artifactId>
        <version>2.0.9</version>
    </dependency>
    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-annotations</artifactId>
        <version>1.5.23</version>
    </dependency>
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.1.45</version>
    </dependency>

Я использую Java enum:

public enum TempReadingSource {
  COLDROOM("coldroom"),
    LOCAL("local"),
    OVEN("oven");

  private String value;

  TempReadingSource(String value) {
    this.value = value;
  }

  @Override
  @JsonValue
  public String toString() {
    return String.valueOf(value);
  }

  @JsonCreator
  public static TempReadingSource fromValue(String text) {
    for (TempReadingSource b : TempReadingSource.values()) {
      if (String.valueOf(b.value).equals(text)) {
        return b;
      }
    }
    return null;
  }
}

и у меня есть эта ошибка:

"Failed to convert value of type 'java.lang.String' to required type 'com.foo.TempReadingSource';

Поэтому я добавляюКонвертер в моей конфигурации Springboot2:

@Configuration
public class StrubConfig extends WebMvcConfigurationSupport {

    @Override
    public FormattingConversionService mvcConversionService() {
        FormattingConversionService f = super.mvcConversionService();
        f.addConverter(new TempReadingSourceConverter());
        return f;
    }

}

и:

public class TempReadingSourceConverter implements Converter<String, TempReadingSource> {
    @Override
    public TempReadingSource convert(String source) {
       try {
          return TempReadingSource.fromValue(source);
       } catch(Exception e) {
          return null;
       }
    }
}

Это Converter решает мой API (через почтальона), но теперь swagger-ui не найдено:

enter image description here

1 Ответ

0 голосов
/ 09 октября 2019

Решение:

@Configuration
public class StrubConfig {

    @Autowired
    private FormattingConversionService conversionService;

    @PostConstruct
    public void registerCustomConverter() {
        conversionService.addConverter(new TempReadingSourceConverter());
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...