请求映射,忽略特定案例而不是全部捕获

时间:2018-07-04 09:57:57

标签: spring swagger request-mapping

简介

我们已经创建了如下的请求映射:

@RequestMapping(path = "/{project}/{resource}/{language}", method = RequestMethod.GET)
public ResponseEntity<Resource> get(
        @PathVariable String project, 
        @PathVariable String resource, 
        @PathVariable String language) throws IOException {

我们可以更改路径并添加前缀,以避免出现问题,但这已被确定为不需要。

path = "/generateReport/{project}/{resource}/{language}"

不幸的是,当前的映射正在使用swagger-ui.html产生问题。 当我们从http://localhost:8023/swagger-ui.html进行调用时,该页面为空白,因为劫持了所有遵循a/b/c格式的请求。

示例:

  <link rel="stylesheet" type="text/css" href="webjars/springfox-swagger-ui/springfox.css?v=2.8.0-SNAPSHOT" >
  <link rel="stylesheet" type="text/css" href="webjars/springfox-swagger-ui/swagger-ui.css?v=2.8.0-SNAPSHOT" >
  <link rel="icon" type="image/png" href="webjars/springfox-swagger-ui/favicon-32x32.png?v=2.8.0-SNAPSHOT" sizes="32x32" />
  <link rel="icon" type="image/png" href="webjars/springfox-swagger-ui/favicon-16x16.png?v=2.8.0-SNAPSHOT" sizes="16x16" />

<script src="webjars/springfox-swagger-ui/swagger-ui-bundle.js?v=2.8.0-SNAPSHOT"> </script>
<script src="webjars/springfox-swagger-ui/swagger-ui-standalone-preset.js?v=2.8.0-SNAPSHOT"> </script>
<script src="webjars/springfox-swagger-ui/springfox.js?v=2.8.0-SNAPSHOT"> </script>

问题

那么我该如何处理?是否有一种方法可以指定以webjars开头的请求应重定向到其他地方?

我尝试使用consumes关键字,并且这种方法对客户端有效(尽管我不喜欢使用像这样的内容类型)。

consumes = MediaType.APPLICATION_JSON_VALUE

不幸的是,当我尝试访问swagger-ui.html时,我得到了以下信息:

DefaultHandlerExceptionResolver Resolved exception caused by Handler execution: org.springframework.web.HttpMediaTypeNotSupportedException: Content type '' not supported

正在为swagger-ui.html生成HTML,但是无法加载其所需的所有资源。

有什么想法吗?

更新

我找到了使用路径变量和正则表达式的解决方法:

@RequestMapping(path = "/{project:^(?!webjars).+}/{resource}/{language}", method = RequestMethod.GET)
public ResponseEntity<Resource> get(
        @PathVariable String project, 
        @PathVariable String resource, 
        @PathVariable String language) throws IOException {

但是,由于我不喜欢这100%,新的答案仍然值得赞赏

1 个答案:

答案 0 :(得分:0)

我找到了使用路径变量和正则表达式的解决方法:

@RequestMapping(path = "/{project:^(?!webjars).+}/{resource}/{language}", method = RequestMethod.GET)
public ResponseEntity<Resource> get(
        @PathVariable String project, 
        @PathVariable String resource, 
        @PathVariable String language) throws IOException {

但是,新的答案仍然值得赞赏!