繁体   English   中英

REST API 总是在 Spring 启动 Z402C5D9AF6B430711EA070BEED 数据库中抛出 404 错误

[英]REST API is always throwing 404 error in Spring boot maven multimodule project with H2 database

我是 Spring 引导的新手,我创建了一个带有 spring 引导的多模块项目(maven)。 我创建了一些 REST API 并连接到 H2 数据库。 数据库已成功连接并能够在 localhost 中运行。

这是我的项目树。用户管理是父模块和核心,serverAPI 是子模块。 我为每个模块创建了包并添加了相关的类。

我已经尝试了我所知道的一切,并在谷歌上搜索了 5 天,但对我没有任何帮助。 我已经包含了我在这里写的每一个代码。 请帮我找出问题所在。 (我正在使用intellij idea 2020.3 Ultimate)

在此处输入图像描述

用户.java

package com.hms.usermanagement.core.model;
import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@Column(name = "full_name")
private String fullName;

@Column(name = "email")
private String email;

public User() {
}

public User(long id, String fullName, String email) {
    this.id = id;
    this.fullName = fullName;
    this.email = email;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String getFullName() {
    return fullName;
}

public void setFullName(String fullName) {
    this.fullName = fullName;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}}

用户存储库

package com.hms.usermanagement.core.repository;

import com.hms.usermanagement.core.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User,Long> {
 } 

应用

package com.hms.usermanagement.serverAPI.application;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

用户控制器

package con.hms.usermanagement.serverAPI.controller;


import com.hms.usermanagement.core.model.User;
import com.hms.usermanagement.core.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

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

@Autowired
private UserRepository userRepository;

//Create Users
@PostMapping("/user")
public User createUser( @Validated @RequestBody User user){
    return userRepository.save(user);
}

//View all Users
@GetMapping("/users")
public List<User> getAllUsers(){
    return userRepository.findAll();
}

//Update Users
@PutMapping("/users/{id}")
public ResponseEntity <User> updateUser(@PathVariable(value = "id") long userId , @RequestBody User userDetails){
    Optional<User> user = userRepository.findById(userId);
    if(user.isPresent()){
        User _user = user.get();
        _user.setFullName(userDetails.getFullName());
        _user.setEmail(userDetails.getEmail());
        return new ResponseEntity<>(userRepository.save(_user), HttpStatus.OK);
    }else {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
}

//Delete Users
@DeleteMapping("/users/{id}")
public ResponseEntity<?> deleteUser(@PathVariable(value = "id") long userId){
    userRepository.findById(userId);
    userRepository.deleteById(userId);
    return ResponseEntity.ok().build();
}

应用程序属性

spring.datasource.url=jdbc:h2:~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

#enable H2 console
spring.h2.console.enabled=true

#custom H2 console
spring.h2.console.path=/h2

架构-h2.sql

CREATE TABLE users (id long PRIMARY KEY AUTO_INCREMENT, full_name VARCHAR(30), email VARCHAR(50));

我已经尝试使用这两个网址在此处输入图像描述

在此处输入图像描述

即使“id”字段是自动生成的,但我也尝试使用 postman 添加 id .. 但仍然得到相同的错误在此处输入图像描述

Your Sprint boot runner class, Application class is under com.hms.usermanagement.serverAPI.application package, so Spring boot will only scan the components under com.hms.usermanagement.serverAPI.application . 因此,Spring 引导无法识别您的核心和 web 组件。

要解决此问题,请尝试将Application.java class 移动到com.hms.usermanagement下。

或者您可以通过在Application.java class 中添加@ComponentScan注释来自定义组件扫描:

@SpringBootApplication
@ComponentScan(basePackages = "com.hms.usermanagement")

删除@Validated 并尝试@Valid 如下

使用 [LOCALHOST]:[PORT]/api/user 调用

//Create Users
@PostMapping("/user")
public User createUser(@RequestBody @Valid User user){
    return userRepository.save(user);
}

我在其他应用程序中遇到了类似的问题。 我做了一个新的 maven --> nvm clean 验证项目并且解决了问题...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM