2016-09-11 134 views
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

总之,有一个用于修复问题的实验性用户界面。未来的修补程序出现时,这最终可能无关紧要。

0

在@RequestMapping注释删除“PARAMS”属性,你的代码仍然可以工作。

+0

这会打破控制器。这两种方法将具有相同的映射。区分这两者的唯一方法是参数@RequestMapping的一部分 – Safari137

+0

如何删除getSamplesByIdAndCost并使大小请求参数可选(必需= false)呢? – gtonic

+0

分离它们的主要目的是每个文档都非常独特。 – Safari137

2

基于查询字符串的相同路径的多个文档不是由Swagger规范支持的,因此也不是由swagger-ui支持的。

通过设置enableUrlTemplating(true)启用的功能似乎是springfox中的一项孵化功能,但在swagger-ui中不起作用。

相关的讨论可以在这里找到:

现在它看起来像你要么必须忍受路径寻找怪异的招摇的用户界面,或者你必须合并您的文档。

+1

你是对的。我已经添加了我自己的答案,这更多的是解决问题。谢谢你的帮助。 – Safari137