2016-09-11 7 views
2

現状:闊歩のParamドキュメント

私が渡されているかのパラメータに基づいてデータを取得するために私のコントローラ内の2つのメソッドを持っています。コード:

@RestController 
@RequestMapping("/samples") 
public class SampleController { 

    @RequestMapping(value = "/{id}", params = {"cost"}, method = RequestMethod.GET) 
    public String getSamplesByIdAndCost(@PathVariable String id, @RequestParam(value = "cost") String cost) { 
     return "result"; 
    } 

    @RequestMapping(value = "/{id}", params = {"cost", "size"}, method = RequestMethod.GET) 
    public String getSamplesByIdCostAndSize(@PathVariable String id, @RequestParam(value = "cost") String cost, 
             @RequestParam(value = "size") String size) { 
    return "ID : " + id + "/COST : " + cost + "/SIZE : " + size; 
    } 
} 

すべてうまくいきますが、ぼんやりしたドキュメントは私が期待したものではありません。

enter image description here

enter image description here

質問

リクエストURLから{?サイズ、コスト}削除する方法はありますか?

はここに私のドケット情報です:

@Bean 
    public Docket myApi() { 
     return new Docket(DocumentationType.SWAGGER_2) 
       .select() 
       .apis(RequestHandlerSelectors.any()) 
       .paths(PathSelectors.any()) 
       .build() 
       .pathMapping("/") 
       .directModelSubstitute(LocalDate.class, 
         String.class) 
       .genericModelSubstitutes(ResponseEntity.class) 
       .alternateTypeRules(
         newRule(typeResolver.resolve(DeferredResult.class, 
           typeResolver.resolve(ResponseEntity.class, WildcardType.class)), 
           typeResolver.resolve(WildcardType.class))) 
       .useDefaultResponseMessages(false) 
       .globalResponseMessage(RequestMethod.GET, 
         newArrayList(new ResponseMessageBuilder() 
           .code(500) 
           .message("500 message") 
           .responseModel(new ModelRef("Error")) 
           .build())) 
       .enableUrlTemplating(true); 

    } 

    @Autowired 
    TypeResolver typeResolver; 

    @Bean 
    UiConfiguration uiConfig() { 
     return new UiConfiguration(
       "validatorUrl",// url 
       "none",  // docExpansion   => none | list 
       "alpha",  // apiSorter    => alpha 
       "schema",  // defaultModelRendering => schema 
       UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, 
       false,  // enableJsonEditor  => true | false 
       true);  // showRequestHeaders => true | false 
    } 

答えて

1

この問題の原因の詳細については、Tobias Raskiの回答を参照してください。

回避策があります。ここでいくつかの詳細を見ることができます:https://github.com/springfox/springfox/issues/1484

要約では、問題を解決する実験的なUIがあります。これは、将来の修正が出たときに、最終的には無関係になる可能性があります。

0

があなたの@RequestMapping注釈で「paramsは」属性を削除し、あなたのコードは動作します。

+0

コントローラが故障することがあります。 2つの方法は同一のマッピングを有することになる。これらの2つを区別する唯一のものは、@RequestMappingのparams部分です。 – Safari137

+0

getSamplesByIdAndCostを削除し、Size Requestparamをオプション(必須= false)にするのはどうですか? – gtonic

+0

それらを分離する主な目的は、それぞれのドキュメントが非常にユニークであることです。 – Safari137

2

クエリ文字列に基づいた同じパスの複数のドキュメントは、Swagger仕様でサポートされているものではないため、swagger-uiではサポートされていません。

enableUrlTemplating(true)で有効にしたものは、springfoxのインキュベーション機能のようですが、今のところswagger-uiでは動作しません。

関連する議論はここで見つけることができます:

今のところ、それはあなたのように見えるのいずれかのパスが闊歩-UIに奇妙な見て生きている、またはあなたあなたのドキュメントをマージする必要があります。

+1

あなたは正しいです。私は自分の答えを追加しました。ご協力いただきありがとうございます。 – Safari137