[英]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));
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.