Swagger不允许HttpServeletRequest的参数

时间:2019-05-18 11:09:51

标签: java spring-boot servlets swagger

我需要接受URL作为API的路径参数。它应该接受编码的和未编码的url(安全性不是问题)。将我的代码基于答案here,我在代码中使用了HttpServelet,如下所示:

@GetMapping(value = "/**")
    @ApiOperation(value = "Get Page from URL")
    @Produces(MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<JSONObject> getPagebyUrl(HttpServletRequest httpServletRequest) {

        String completeUrl = httpServletRequest.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE).toString();

        String bestMatchingPattern = httpServletRequest.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE).toString();

        String extractPathWithinPattern = new AntPathMatcher().extractPathWithinPattern(bestMatchingPattern, completeUrl);

        String url = extractPathWithinPattern.replace(":/", "://");

现在,当我使用URI从邮递员调用URI时,String url现在具有apt值

http://localhost:8045/v1/urls/https%3A%2F%2Fsome-url.html

//also works
http://localhost:8045/v1/urls/https://some-url.html

但是,Swagger不提供不使用@XXXParam/Variable之一来传递路径参数的选项。

我了解了@ApiImplicitParams({@ApiImplicitParam}),并尝试了相同的方法,但这并没有太大帮助。我有机会通过参数(很明显),但是它始终以null的形式接收。也许我用错了。

问题:

  1. 是否有更好的方法将URL作为路径参数传递给我的组件?
  2. 如果没有,如何使URL传递为路径参数? (上面的代码有效,但不能大张旗鼓)

0 个答案:

没有答案