2016-08-19 2 views
8

Мы используем весну 4.x и swagger-jersey2-jaxrs_2.10. Swagger не перечисляет мои API, он всегда возвращает только данные о версии.Jersey 2 + Swagger возвращает пустой список API

pom.xml

<dependency> 
    <groupId>com.wordnik</groupId> 
    <artifactId>swagger-jersey2-jaxrs_2.10</artifactId> 
    <version>1.3.13</version> 
    <scope>compile</scope> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>2.23.2</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
    <version>2.23.2</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-multipart</artifactId> 
    <version>2.23.2</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.23.2</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-spring3</artifactId> 
    <version>2.23.2</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
     </exclusion> 
     <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-aop</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

web.xml

<filter> 
     <filter-name>SpringApplication</filter-name> 
     <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class> 

     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>xxx.xxx.xxx.filter.JerseyApiSpringFilter</param-value> 
     </init-param> 

     <init-param> 
      <param-name>jersey.config.servlet.filter.forwardOn404</param-name> 
      <param-value>false</param-value> 
     </init-param> 

     <init-param> 
      <param-name>jersey.config.servlet.filter.staticContentRegex</param-name> 
      <param-value>/docs/.*</param-value> 
     </init-param> 
    </filter> 

класс ресурсов

@Path("/listApi") 
@Component 
@Scope("request") 
@Api(value = "/listApi", description = "List API") 
@Produces({"application/json"}) 
public class ListApiResource { 

    @GET 
    @Path("/") 
    @Produces(MediaType.APPLICATION_JSON) 
    @ApiOperation(value = "Retrieve all list of apps", response = listDto.class) 
    public Response getAllApps (@QueryParam("appId") int appId) { 

      // code 
    } 
} 

ResourceConfig класс

public class JerseyApiSpringFilter extends ResourceConfig { 
     static { 
    //  JaxrsApiReader.setFormatString(""); 
     } 

     public JerseyApiSpringFilter() { 

      packages("com.xxx.xxxx.xxxxxx.resources"); 
      register(RequestContextFilter.class); 
      register(ApiListingResource.class); 
      register(ApiListingResourceJSON.class); 
      register(JerseyApiDeclarationProvider.class); 
      register(JerseyResourceListingProvider.class); 
      register(MultiPartFeature.class); 
      register(JacksonFeature.class); 
     } 

Мои приложения basebath/API-документы возвращает

{ 
    "apiVersion": "1.0.0", 
    "swaggerVersion": "1.2", 
} 

ответ

1

У меня была такая же проблема, и использовали н, как показано ниже.

У меня есть компонент, который содержит список возможных значений, сгенерированных при запуске приложения через config. Swagger должен показать список, но это не сработает.

@GET 
@Path("info/types") 
@PermitAll 
@Produces(MediaType.APPLICATION_JSON) 
@ApiOperation(value = "Possible bean types", notes = "List all available bean types", 
     response = BeanTypesList.class, responseContainer = "List") 
@ApiResponses(value = { @ApiResponse(code = 200, message = "List of all available bean types", 
     response = BeanTypesList.class) }) 
@Timed 
@ExceptionMetered 
@CacheControl(maxAge = 6, maxAgeUnit = TimeUnit.HOURS) 
public List<BeanType> getBeanTypes() throws JsonProcessingException { 
    return new ArrayList<BeanType>(BeanType.values()); 
} 

public class SwaggerClassHelper { 

    @ApiModel(value = "BeanTypesList", description = "Overview of possible bean types") 
    public class BeanTypesList { 

     @ApiModelProperty(value = "List of several possible bean types.", required = true) 
     private List<BeanType> types; 

     @JsonCreator 
     public BeanTypesList(
       List<BeanType> types) { 
      this.types = types; 
     } 

     public List<BeanType> getTypes() { 
      return this.types; 
     } 

     @JsonIgnore 
     @Override 
     public String toString() { 
      return ReflectionToStringBuilder.toString(this); 
     } 
    } 
} 

@ApiModel(value = "Bean type", description = "Represents the type of a bean.") 
public final class BeanType { 

    @JsonIgnore 
    private static Set<String> names = new HashSet<String>(); 

    @JsonProperty("name") 
    private String name; 

    private BeanType(
      List<String> names) { 
     synchronized (BeanType.names) { 
      BeanType.names.addAll(names); 
     } 
    } 

    private BeanType(
      String name) { 
     this.name = name; 
    } 

    //... other methods 
} 

Я знаю его не разыскиваемого решение, если вы используете чванство, но вы можете указать ввод/вывод с помощью полей ответа!

+0

Этот код не помог мне .. любезно предоставить правильное решение, чтобы решить мою проблему .. – SST

2

Попробуйте добавить это в класс ресурсов (конструктор):

register(ApiListingResource.class); 
    register(SwaggerSerializers.class); 

    BeanConfig beanConfig = new BeanConfig(); 
    beanConfig.setVersion("1.0.0"); 
    beanConfig.setSchemes(new String[]{"http"}); 
    beanConfig.setBasePath("/api"); //or insert your base path (see main Jersey app class) 
    beanConfig.setResourcePackage("com.xxx.where.your.endpoints"); 
    beanConfig.setScan(true); 
    beanConfig.setPrettyPrint(true); 
+0

я сконфигурированный с вышеизложенным beanConfig. Stil Я не могу видеть пользовательский интерфейс swagger ... Просьба предоставить конфигурацию swagger для весны 4.x и swagger-jersey2-jars_2.10 – SST

+0

У меня есть конфигурация, которую я описал, и чванство работает. Пожалуйста, убедитесь, что вы написали правильный пакет resourece, basepath (посмотрите @ApplicationPath в проекте), также все endpoins должны иметь аннотацию @Api («somepath»), которая будет находиться в swagger.json. Вы все еще получаете пустой swagger.json? – kosbr

Смежные вопросы