【问题标题】:Spring Boot REST API Generates 404 Not FoundSpring Boot REST API 生成 404 Not Found
【发布时间】:2018-12-10 08:41:09
【问题描述】:

我正在尝试执行连接到 MySQL (phpmyadmin) 数据库的 Spring Boot 应用程序。问题是当我尝试获取、删除或发布数据时,它会生成此消息。

{
  "timestamp": "2018-07-02T06:36:37.000+0000",
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/api/users"
}

主类:

public class App extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(App.class);
    }
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        SpringApplication.run(App.class, args);
    }
}

依赖关系:

<dependencies>
      <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        </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-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <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-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity4</artifactId>
        </dependency>
        <dependency>
            <groupId>com.nulab-inc</groupId>
            <artifactId>zxcvbn</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.191</version>
        </dependency>
    </dependencies>

Application.properties

    spring.datasource.url = jdbc:mysql://localhost:3306/demo_db?useSSL=false
    spring.datasource.username=root
    spring.datasource.password=root
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
    spring.jpa.hibernate.ddl-auto=create
    spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.jpa.generate-ddl=true
    spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

用户控制器:

@RestController
@RequestMapping("/api")
public class UserController {

    @Autowired
    UserRepository userRepoObject;

    @GetMapping("/users")
    public List<User> getAllUsers(){
        return userRepoObject.findAll();
    }

    @PostMapping("/users")
    public User createUser(@Valid @RequestBody User userObj) {
        return userRepoObject.save(userObj);
    }

    @GetMapping("/users/{id}")
    public User getUser(@PathVariable(value = "id") Long userId) {
        return userRepoObject.findById(userId)
                .orElseThrow(() -> new ResourceNotFoundException("User", "id", userId));
    }

    @DeleteMapping("users/{id}")
    public ResponseEntity<?> deleteUser(@PathVariable(value="id") Long userId){
        User user = userRepoObject.findById(userId).orElseThrow(() -> new ResourceNotFoundException("User","id",userId));
        userRepoObject.delete(user);
        return ResponseEntity.ok().build();
    }

}

除此之外,我的应用程序中还有 User、UserController 和 UserRepository 类。 demo_db 数据库和用户表已经在 phpmyadmin 中创建。

请帮我解决这个问题。非常感谢。

如需更多信息,请附上错误截图。

【问题讨论】:

  • 告诉我们UserController
  • 404 表示“找不到资源”,这意味着无法识别您的控制器类(查看启动日志输出)或请求与映射不匹配。
  • 你的主班对我来说看起来不熟悉(这并不意味着它是错误的)。我正在为该类使用注释 SpringBootAplication 并且不扩展 SpringBootServletInitializer 并因此不覆盖方法。也许你试一试。
  • @Flocke 还是同样的错误。
  • 在我的应用程序中,我使用了两个注释 SpringBootApplication 、 EnableAutoConfiguration 和 extends SpringBootServletInitializer 并且工作正常。

标签: spring spring-mvc spring-boot jakarta-ee postman


【解决方案1】:

将以下内容添加到您的 Main 类中:

@SpringBootApplication
@ComponentScan({ "your controllers packages here", "other packages if you use them" })
@EnableJpaRepositories(basePackages = "your repo packages here")
@EntityScan(basePackages = "your entities")

如果你在其他地方定义了你的包,比如在第二个模块中,你需要手动添加它们。

【讨论】:

    猜你喜欢
    • 2018-04-07
    • 2021-09-11
    • 2015-07-31
    • 2020-10-21
    • 2016-11-19
    • 2021-05-14
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多