我有一个带有swagger文件的springboot应用程序。我使用任何招摇的Maven插件,它都能正常工作。

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

我的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

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

最佳答案

解决方法是:

@Configuration
public class StrubConfig {

    @Autowired
    private FormattingConversionService conversionService;

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

}

09-15 23:21