我需要接受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
的形式接收。也许我用错了。
问题: