请求映射,省略特定情况而不是捕获所有情况

Request Mappings, leave out specific cases instead of catching all

简介

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

@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%

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

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

但是,仍然感谢新的答案!