当前位置: 首页 > 知识库问答 >
问题:

斯威格路线返回404春装运动衫

柯建业
2023-03-14

我正试图将Swagger添加到现有的spring boot应用程序中,如本教程所述。

我的主要应用课程如下:

@SpringBootApplication
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

斯威格配置是:

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    @Bean
    public Docket api() { 
        return new Docket(DocumentationType.SWAGGER_2)
       .select()
        .apis(RequestHandlerSelectors.any())
        .paths(PathSelectors.any())
        .build();                                           
    }
}

我可以在启动日志中看到Spring显然识别了Swagger和它的路线:

s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/v2/api-docs],methods=[GET],produces=[application/json || application/hal+json]}" onto public org.springframework.http.ResponseEntity<springfox.documentation.spring.web.json.Json> springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/configuration/ui]}" onto org.springframework.http.ResponseEntity<springfox.documentation.swagger.web.UiConfiguration> springfox.documentation.swagger.web.ApiResourceController.uiConfiguration()
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/configuration/security]}" onto org.springframework.http.ResponseEntity<springfox.documentation.swagger.web.SecurityConfiguration> springfox.documentation.swagger.web.ApiResourceController.securityConfiguration()
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/swagger-resources]}" onto org.springframework.http.ResponseEntity<java.util.List<springfox.documentation.swagger.web.SwaggerResource>> springfox.documentation.swagger.web.ApiResourceController.swaggerResources()

但是当试图访问http://localhost:8080/v2/api-docs时,我得到一个普通的404作为响应。

我在网上能找到的所有类似问题都是指人们不使用Spring Boot,必须手动映射资源(也在同一教程链接中描述),但我的情况并非如此。

有没有办法解决这个问题,或者——至少——从哪里着手调查?

共有1个答案

申屠乐池
2023-03-14

我发现问题与jersey的应用程序路径配置有关。在我的例子中,通过以下注释:

@Component
@ApplicationPath("/") //WRONG
@Configuration
public class JerseyConfiguration extends ResourceConfig {
...
}

@ApplicationPath配置会覆盖Jersey本身发布的任何路由(比如白标签/error)或第三方库(在本例中是/v2/api docs/configuration/ui/configuration/security和来自swagger的/swagger resources)。简单地将/作为路径迫使严格使用我的应用程序中的自定义控制器来解析请求。

@ApplicationPath限制为应用程序所服务的实际路径(在我的例子中是/api)将允许jersey将其他路由绑定到自动生成的控制器:

@Component
@ApplicationPath("/api") //RIGHT
@Configuration
public class JerseyConfiguration extends ResourceConfig {
...
}
 类似资料:
  • 我编写了controller,它为每个映射使用了不同的值。现在我将它简化为对所有映射使用相同的值,但是我不知道如何使test工作,因为它在每个映射上都返回404。 这里是我的控制器: 和我的测试: 404及以下所有测试结果: 在org.springframework.test.util.assertionerrors.fail(assertionerrors.java:59)在org.spring

  • 我正在使用nginx和react。我的nginx.conf文件 根据此配置,nginx为所有路由服务200。假设我的路线是 现在假设有人输入错误的url 在这种情况下,我想抛出404而不落地到nginx级别本身的应用程序。这是否可能在nginx级别处理路由和发送404尽管200和比在REACTE级别处理。 我发现要在nginx级别限制任何特定的路由,我们可以使用下面的代码来实现 但我想限制所有对我

  • 我试图迁移我从昂首阔步2.0到openapi 3.0.2为我的快速api。swagger定义和路径是用swagger-jsdoc编写的。这应该不会造成任何问题,因为他们的留档状态,它可以与openapi 3. x以及昂首阔步2.0工作。 当添加openapi: 3.0. x到我的大摇大摆定义视图看起来很好。然而,当试图通过昂首阔步的视图做一个帖子请求时,正文是空的。 我对自大的定义如下: 现在我有

  • 我正在学习Spring Bootkubernetes并尝试为我的服务设置Spring Cloud网关。我相信使用Spring Cloud网关,我们不再需要使用功能区来进行负载平衡。所以如果我不使用功能区,那么路由的配置也会改变。我查看了网站以寻求建议,我发现如下:- 在这种情况下,uri具有服务可用的端口的硬编码值。这是推荐的方法吗? 然后还有另一种配置的味道,看起来像这样,不确定url表达式想做

  • 我是新来的Laravel使用本地开发环境与家园尝试运行简单的测试 路由/网络。php: 运行phpunit返回404错误 vagrant@homestead:~/code/laravel$phpunit phpunit 6.4。3由塞巴斯蒂安·伯格曼和撰稿人撰写。 .F.3/3(100%) 时间:1.07秒,内存:10.00MB 有1次失败: 1) Tests\Feature\UserTest::