如果添加带有WebMvcConfigurationSupport的Converter,则Swagger OpenAPI 3将不会显示在springboot 2上

时间:2019-10-09 15:26:57

标签: java spring-boot swagger

我有一个带有swagger文件的springboot应用程序。我使用任何招摇的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 :(得分:0)

解决方案是:

@Configuration
public class StrubConfig {

    @Autowired
    private FormattingConversionService conversionService;

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

}