2016-09-11 3 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

요약하면 문제를 해결하는 실험용 UI가 있습니다. 미래의 문제가 발생할 때 이것은 결국 무의미 할 수 있습니다.

0

이 @RequestMapping 주석에 '의 PARAMS'속성을 제거, 코드는 여전히 작동합니다.

+0

컨트롤러가 손상 될 수 있습니다. 두 가지 방법은 동일한 매핑을 갖습니다. 이 두 가지를 구별하는 유일한 방법은 @RequestMapping의 params 부분입니다. – Safari137

+0

getSamplesByIdAndCost를 제거하고 Size Requestparam을 선택 사항 (필수 = false)으로 만드는 것은 어떻습니까? – gtonic

+0

이들을 분리하는 주된 목적은 각각의 문서가 매우 독특하다는 것입니다. – Safari137

2

쿼리 문자열을 기반으로 한 동일한 경로에 대한 여러 가지 문서는 Swagger 사양에서 지원되는 것이 아니므로 swagger-ui가 아닌 것입니다.

enableUrlTemplating(true)으로 설정 한 기능은 springfox의 인큐베이션 기능인 것으로 보이지만 swagger-ui에서는 현재 작동하지 않습니다.

관련 논의는 여기에서 찾을 수 있습니다 :

지금 당신처럼 보이는 두 경로가 자신감-UI에서 이상한 찾고 살아야하거나, 귀하의 문서를 병합해야합니다.

+1

정확합니다. 나는 더 많은 일을하는 내 자신의 대답을 추가했다. 당신의 도움을 주셔서 감사합니다. – Safari137