Swagger2 404 状态 - Spring Boot

问题描述 投票:0回答:1

我正在处理我的 Spring boot 项目,我想添加 swagger2,这就是我所做的:

SwaggerConfig.java:

package com.example.diamondstore.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
@EnableWebMvc
public class SwaggerConfig implements WebMvcConfigurer {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors.basePackage("com.example.diamondstore.controller"))
                .paths(PathSelectors.regex("/.*"))
                .build().apiInfo(apiInfoMetaData());
    }

    private ApiInfo apiInfoMetaData() {

        return new ApiInfoBuilder().title("Diamond Store API")
                .description("Spring Boot REST API for Diamond Store")
                .contact(new Contact("Dev-Team", "https://www.dev-team.com/", "[email protected]"))
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                .version("1.0.0")
                .build();
    }

}

pom.xml:

4.0.0 org.springframework.boot spring-boot-starter-父级 3.2.5 com.example 钻石店 0.0.1-快照 钻石店 Spring Boot 的演示项目 17 org.springframework.boot spring-boot-启动器-web

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>9.4.0.jre11</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>3.0.0</version>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>3.0.0</version>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>

    
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

UserController.java:

package com.example.diamondstore.controller;

import com.example.diamondstore.model.User;
import com.example.diamondstore.repository.UserRepository;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    private final UserRepository userRepository;

    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @GetMapping("/home")
    public String welcome(){
        return "Welcome to Diamond Store";
    }
    
    @GetMapping("/users")
    public ResponseEntity<Iterable<User>> getUsers() {
        return ResponseEntity.ok(userRepository.findAll());
    }

    @PostMapping("/login")
    public ResponseEntity<String> login(@RequestBody User user) {
        User existingUser = userRepository.findByUsername(user.getUsername());
        if (existingUser != null && existingUser.getPassword().equals(user.getPassword())) {
            return ResponseEntity.ok("Logged in successfully");
        } else {
            return ResponseEntity.badRequest().body("Invalid username or password");
        }
    }

    @PostMapping("/register")
    public ResponseEntity<String> register(@RequestBody User user) {
        if (userRepository.findByUsername(user.getUsername()) != null) {
            return ResponseEntity.badRequest().body("Username already exists");
        }
        userRepository.save(user);
        return ResponseEntity.ok("Registered successfully");
    }
}

运行后,我尝试了很多网址,例如: http://localhost:8080/swagger-ui.html http://localhost:8080/swagger-ui/index.html
http://localhost:8080/swagger-ui/ 该页面总是给我: 白标错误页面 此应用程序没有 /error 的显式映射,因此您将其视为后备。

5 月 8 日星期三 15:07:44 ICT 2024 出现意外错误(类型=未找到,状态=404)。

这是我运行后的终端:

PS D:\diamondstore\diamondstore>  d:; cd 'd:\diamondstore\diamondstore'; & 'C:\Users\PHUC\.vscode\extensions\redhat.java-1.30.0-win32-x64\jre\17.0.10-win32-x86_64\bin\java.exe' '@C:\Users\PHUC\AppData\Local\Temp\cp_asgrk40cafq1m761rgl0c6xud.argfile' 'com.example.diamondstore.DiamondstoreApplication'  

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.5)

2024-05-08T15:00:33.026+07:00  INFO 16320 --- [diamondstore] [           main] c.e.d.DiamondstoreApplication            : Starting DiamondstoreApplication using Java 17.0.10 with PID 16320 (D:\diamondstore\diamondstore\target\classes started by PHUC in D:\diamondstore\diamondstore)
2024-05-08T15:00:33.034+07:00  INFO 16320 --- [diamondstore] [           main] c.e.d.DiamondstoreApplication            : No active profile set, falling back to 1 default profile: "default"
2024-05-08T15:00:34.823+07:00  INFO 16320 --- [diamondstore] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-05-08T15:00:34.952+07:00  INFO 16320 --- [diamondstore] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 114 ms. Found 1 JPA repository interface.
2024-05-08T15:00:36.446+07:00  INFO 16320 --- [diamondstore] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2024-05-08T15:00:36.475+07:00  INFO 16320 --- [diamondstore] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2024-05-08T15:00:36.479+07:00  INFO 16320 --- [diamondstore] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.20]
2024-05-08T15:00:36.639+07:00  INFO 16320 --- [diamondstore] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-05-08T15:00:36.642+07:00  INFO 16320 --- [diamondstore] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3493 ms
2024-05-08T15:00:37.096+07:00  INFO 16320 --- [diamondstore] [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-05-08T15:00:37.265+07:00  INFO 16320 --- [diamondstore] [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.4.4.Final
2024-05-08T15:00:37.359+07:00  INFO 16320 --- [diamondstore] [           main] o.h.c.internal.RegionFactoryInitiator    : HHH000026: Second-level cache disabled
2024-05-08T15:00:37.926+07:00  INFO 16320 --- [diamondstore] [           main] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-05-08T15:00:38.041+07:00  INFO 16320 --- [diamondstore] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2024-05-08T15:00:38.939+07:00  INFO 16320 --- [diamondstore] [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection ConnectionID:1 ClientConnectionId: 35c50ab8-ab1c-40ff-b35f-4433e8c59ad5
2024-05-08T15:00:38.947+07:00  INFO 16320 --- [diamondstore] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2024-05-08T15:00:40.588+07:00  INFO 16320 --- [diamondstore] [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2024-05-08T15:01:04.709+07:00  INFO 16320 --- [diamondstore] [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2024-05-08T15:01:05.423+07:00  WARN 16320 --- [diamondstore] [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2024-05-08T15:01:05.985+07:00  WARN 16320 --- [diamondstore] [           main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false)
2024-05-08T15:01:06.122+07:00  INFO 16320 --- [diamondstore] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path ''
2024-05-08T15:01:06.122+07:00  INFO 16320 --- [diamondstore] [           main] c.e.d.DiamondstoreApplication            : Started DiamondstoreApplication in 34.021 seconds (process running for 35.015)
2024-05-08T15:01:06.461+07:00  INFO 16320 --- [diamondstore] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-05-08T15:01:06.461+07:00  INFO 16320 --- [diamondstore] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2024-05-08T15:01:06.461+07:00  INFO 16320 --- [diamondstore] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
2024-05-08T15:01:06.505+07:00  WARN 16320 --- [diamondstore] [nio-8080-exec-1] o.s.web.servlet.PageNotFound             : No mapping for GET /swagger-ui.html
2024-05-08T15:01:06.530+07:00  WARN 16320 --- [diamondstore] [nio-8080-exec-1] o.s.web.servlet.PageNotFound             : No endpoint GET /swagger-ui.html.
2024-05-08T15:07:44.760+07:00  WARN 16320 --- [diamondstore] [nio-8080-exec-4] o.s.web.servlet.PageNotFound             : No mapping for GET /swagger-ui/index.html
2024-05-08T15:07:44.791+07:00  WARN 16320 --- [diamondstore] [nio-8080-exec-4] o.s.web.servlet.PageNotFound             : No endpoint GET /swagger-ui/index.html.

我现在想知道是否有办法解决这个问题。谢谢你

spring-boot swagger-2.0
1个回答
0
投票

您还没有正确配置 swagger。您可以检查此链接 - https://stackoverflow.com/a/78402708/8769148

或者你可以浏览 github 上的代码 - https://github.com/s4sunnny/spring-boot-react-angular-jwt-authentication

© www.soinside.com 2019 - 2024. All rights reserved.