2017-03-04 81 views
2

我只是想揚鞭融入我春季啓動(JAX-RS)項目,Gradle.I內置了能夠產生泊塢窗(揚鞭UI)爲同一如下: Swagger UI Docker揚鞭2(春季狐狸)增加了「ES」我的API的

我都使用默認設置,配置我昂首闊步如下:

package com.abc; 

import lombok.extern.slf4j.Slf4j; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.annotation.Import; 
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; 

import springfox.documentation.swagger2.annotations.EnableSwagger2; 

@EnableAutoConfiguration 
@SpringBootApplication 
@EnableMongoRepositories 
@Slf4j 
@Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class,springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration.class}) 
@EnableSwagger2 
public class ServiceApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(ServiceApplication.class, args); 
    } 

    public static void run(String[] args) throws Exception{ 
     log.info("Started application on: 8080"); 
    } 
} 

我們可以在圖像中看到GET活動API泊塢窗顯示/ eventses ..所以,從那裏還增加ES到/事件API,它可寫爲:

@GET 
public HashMap<String, Object> getEventList(@DefaultValue("1") @QueryParam("page") int page, 
     @DefaultValue("10") @QueryParam("rpp") int rpp, @QueryParam("events") String eventIds) { 
    HashMap<String, Object> eventsResultMap= new HashMap<String, Object>(); 

    List<Events> events = null; 

    if (eventIds != null && eventIds.length() > 0) { 
     List<String> eventsIdList = Arrays.asList(eventIds.split(",")); 
     log.info("" + eventsIdList); 
     events = eventService.getEvents(eventsIdList); 
    } else { 
     events = eventService.getEvents(page - 1, rpp); 
    } 
    eventsResultMap.put("EVENTS", events); 

    HashMap<String, Object> recordsMetaMap = new HashMap<String, Object>(); 
    recordsMetaMap.put("total", eventService.totalCount()); 
    recordsMetaMap.put("page", page); 
    recordsMetaMap.put("rpp", rpp); 
    eventsResultMap.put("_metadata", recordsMetaMap); 
    log.info("The events you have queried for are:" + eventsResultMap); 
    return eventsResultMap; 
} 

請指引我哪裏做錯了。自定義配置需要完成。

我從春季官方文檔中採取了Reference

+0

我不認爲它正在閱讀方法。例如,它被寫爲'@ GET',但在圖片中顯示爲'POST'和其他類型。只是一個想法....我認爲'es'是由於'HashMap'的返回類型。你有沒有嘗試過使用'@ ApiOperation'註解? – Raj

回答

1

如果您在spring引導中使用jax-rs實現,則應該使用swagger-core jax-rs庫而不是spring fox。 Swagger團隊已經提供了非常詳細的說明here關於如何配置你的應用程序,用於不同的實現,如澤西島,休息等。我發現它很容易集成澤西2.x.

爲了讓您的swagger文檔豐富,您應該嘗試提供儘可能多的元數據,因爲您可以使用不同的swagger註釋來記錄here。在某些情況下,Swagger很好地利用了這些註釋以及jax-rs註釋(例如QueryParam和PathParam標識)。

如果你讓我知道你正在使用哪個jax-rs實現,我可能會爲你提供一些示例配置。

編輯:

對於新澤西2.x的,你將需要添加這樣的事情在你的球衣配置類(擴展org.glassfish.jersey.server.ResourceConfig):

@Bean 
public BeanConfig swaggerConfig() { 

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

    BeanConfig config = new BeanConfig(); 
    config.setConfigId("your-config-id"); 
    config.setTitle("Your Title"); 
    config.setSchemes(new String[] { "https", "http" }); 
    config.setBasePath("your application base path E.g. /api"); 
    config.setResourcePackage("package to be scanned E.g. com.example"); 
    config.setPrettyPrint(true); 
    config.setScan(true); 
    return config; 
} 

除此之外,您將需要用標註註釋來標註您的端點(服務)類。例如。

@Path("/material") 
@Service 
@Api(value = "Material") 
public class MaterialEndpoint { 

    @POST 
    @ApiOperation(value = "Create Material") 
    @ApiResponses(value = { @ApiResponse(code = 201, message = "Success", response = CreateMaterialResponse.class), 
          @ApiResponse(code = 409, message = "Failure", response = ErrorResponse.class) }) 
    public Response createMaterial(CreateMaterialRequest createMaterialRequest){ 
// Code goes here 
    } 

} 

而您的實體與招搖的註釋。這取決於你想讓你的swagger文檔有多豐富。取決於您可以選擇註釋更多或更少的類。

+0

This doc https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey -2.X-Project-Setup-1.5關於maven項目.. Gradle怎麼樣? – CandleCoder

+0

我相信,只要您在存儲庫部分提供了正確的位置(MavenCentral())並以gradle方式提供依賴項,配置就可以工作。 –

+0

我正在使用Jersey 2.X – CandleCoder

3

一切都在/eventses來自Springfox對Spring數據REST支持,並沒有任何與您的控制器的getEventList方法。如果你不想自動發現你的實體,那麼從@Import行中刪除該類應該可以做到。

+0

是啊我已經試過這個技巧之前,我問這個問題..對我沒有提到這對我的問題..但問題是,如果我刪除線@Import,然後我所有的控制器得到消失從招搖的UI(其中現在可見),你能告訴我如何讓我的控制器可以掃描嗎? – CandleCoder

+0

事實上,你需要告訴Swagger你的控制器。你的項目中是否有[docket](http://springfox.github.io/springfox/docs/current/#configuring-springfox)?您可以從[此鏈接的問題](http://stackoverflow.com/q/38827281/3990817)中爲SwaggerConfig類學習一個非常好的示例。 我通常通過'RequestHandlerSelectors.basePackage'謂詞限制控制器的發現,但確實可以使用'.any()'開始並驗證您的控制器是否被拾取。 – MrMister

+0

我會嘗試這個,並會讓你知道...並且也會接受你的答案(如果有效的話) – CandleCoder